Построение пакетных файлов (*.bat)

na_PaLm

Ословед
Есть такая(ое) команда(приложение) Getmac(.exe), подскажите плз почему оно не работает.
Без параметров (те. для своего компьютера) все норм,
а вот если так Getmac /s 192.168.56.1, то ошибка: сервер RPC недоступен.
Обе похожие службы (с абревиатурой RPC) я запустил, но всё равно эта ошибка, что это значит ?

(ИП-адрес 100% существующий :))
 
Сервер RPC - эта служба так и называется без всяких дугих слов и у тебя он скорей всего и так запущен без него куча всего не будет работать(можешь посмотреть в зависимостях)
Либо RPC сервер не был запущен на удалённой машине, либо (что скорее всего) удалённая машина защищена от подобных вещей(файервол стоит или убраны стандартные ресурсы $ADMIN и.т.д.).

P.S. Я пробовал у меня запустилось, но потребовало пароль :)
 

na_PaLm

Ословед
А есть какая-нибудь возможность запросить MAC-адрес компьютера, не входящего в свою подсеть, может с сервера или еще как-нибудь, я даже не знаю.
Ведь в своей подсети легко определить MAC-адрес по IP с помощью команды ARP, наверняка есть способ сделать это и в других подсетях, не находясь в них, или нет ?
Это же не какая-то личная(секретная) информация :) .

Вобщем если кто знает, подскажите пожалуйста.
 
B

Boss Artem

А есть какая-нибудь возможность запросить MAC-адрес компьютера, не входящего в свою подсеть, может с сервера или еще как-нибудь, я даже не знаю.
Ведь в своей подсети легко определить MAC-адрес по IP с помощью команды ARP, наверняка есть способ сделать это и в других подсетях, не находясь в них, или нет ?
Это же не какая-то личная(секретная) информация :) .

Вобщем если кто знает, подскажите пожалуйста.
Спроси лучше тут:
http://city.is74.ru/forum/forumdisplay.php?f=222
А то сетевики в мастерскую нечасто заходят... Сам хотел бы знать ответ на твой вопрос=)
 
А есть какая-нибудь возможность запросить MAC-адрес компьютера, не входящего в свою подсеть, может с сервера или еще как-нибудь, я даже не знаю.
Ведь в своей подсети легко определить MAC-адрес по IP с помощью команды ARP, наверняка есть способ сделать это и в других подсетях, не находясь в них, или нет ?
Это же не какая-то личная(секретная) информация :) .

Вобщем если кто знает, подскажите пожалуйста.

Через netbios не получится в основном так как он отключен практически у всех.
Можно поискать МАС в твоем компе в таблице маршрутизации вот так:
#include "iphlpapi.h"
//addr - искомый inet_addr(ip), PhysAddr - МАС, PhysAddrLen - его длина
bool GetMACFromIpNetTable(unsigned long addr, unsigned char *PhysAddr, unsigned long *PhysAddrLen)
{
PMIB_IPNETTABLE pTable;
unsigned long rc, Size = 0, i;
bool result = false;
if (GetIpNetTable(NULL, &Size, false) == ERROR_INSUFFICIENT_BUFFER)
if ((pTable = (PMIB_IPNETTABLE) GlobalAlloc(GPTR, Size)) != NULL)
{
if (GetIpNetTable(pTable, &Size, false) == NO_ERROR)
for (i=0; i<pTable->dwNumEntries; i++)
if (pTable->table.dwAddr == addr)
{
*PhysAddrLen = pTable->table.dwPhysAddrLen;
memcpy(PhysAddr, pTable->table.bPhysAddr, pTable->table.dwPhysAddrLen);
result = true;
break;
}
GlobalFree(pTable);
}
return result;
}
но там обычно адреса долго не задерживаются.
Виндузовский SendARP работает только в своей подсети.
Если есть под рукой что-то что может послать ethernet пакет в сеть тода послать ARP запрос так:
int SendARP(char *ip, char *MyMAC, char *MyIp)
{
char *a;
int rc;
a = (char *)GlobalAlloc(GPTR, 60);
memset((void *)a,0,60);
memset(a,0xFF,6);
memcpy(a+6, MyMAC,6);
*(u_short*)(a+12) = htons(0x0806);
*(u_short*)(a+14) = htons(1);
*(u_short*)(a+16) = htons(0x0800);
*(u_char*)(a+18) = 6;
*(u_char*)(a+19) = 4;
*(u_short*)(a+20) = htons(1);
memcpy(a+22, sMAC, 6);
*(u_long*)(a+28) = inet_addr(MyIp);
memset(a+32, 0x00, 6);
*(u_long*)(a+38) = inet_addr(ip);
rc = sendpacket(a, 60);
GlobalFree(a);
return rc;
}
ловить ответ так
...
if (*(u_short *)(a + 12) = htons(0x0806) &
*(u_short*)(a+20) = htons(2) )
{ //ARP ответ
u_long ip_addr = *(u_long*)(a+28);
char MAC[6];
memcpy(MAC, a + 22, 6);
}
 

    gureedo

    очки: 5
    круто

    na_PaLm

    очки: 5
    Плусадын. Когда изучу С++ это мне пригодится :)
B

Boss Artem

Поднимем старую темку =) есть консольная прога, она при запуске запрашивает имя и пароль, но не как параметры, а выдает запрос в консоль.
Enter Auth Username: сюда_вводим_юзера_нажимаем_enter
Enter Auth Password:сюда_вводим_пароль_нажимаем_enter

можно ли написать батник (или сделать что-то еще) который бы автоматизировал ее запуск?
 

Yuri_K

Администрация
Награды
4
Поднимем старую темку =) есть консольная прога, она при запуске запрашивает имя и пароль, но не как параметры, а выдает запрос в консоль.
Enter Auth Username: сюда_вводим_юзера_нажимаем_enter
Enter Auth Password:сюда_вводим_пароль_нажимаем_enter

можно ли написать батник (или сделать что-то еще) который бы автоматизировал ее запуск?

Не знаю, как передать две строки, но одну можно так:

echo "что-нибудь"|Имя_программы
 

sinisha

Ословед
Поднимем старую темку =) есть консольная прога, она при запуске запрашивает имя и пароль, но не как параметры, а выдает запрос в консоль.
Enter Auth Username: сюда_вводим_юзера_нажимаем_enter
Enter Auth Password:сюда_вводим_пароль_нажимаем_enter

можно ли написать батник (или сделать что-то еще) который бы автоматизировал ее запуск?
попробуй так
prog.exe < access.txt
где в access.txt в первой строке логин, во второй пароль.
Только есть ньюанс, если программа не пользуется потоками, это не проканает.
 
B

Boss Artem

попробуй так
prog.exe < access.txt
где в access.txt в первой строке логин, во второй пароль.
Только есть ньюанс, если программа не пользуется потоками, это не проканает.
не канает, он склеивает строки из файла и полученное отправляет как логин, а пароль отсылает пустой.
 

sinisha

Ословед
start /?
Запуск указанной программы или команды в отдельном окне.

START ["заголовок"] [/Dпуть] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME| /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B]
[команда/программа] [параметры]

"заголовок" Заголовок окна.
путь Рабочий каталог.
B Запуск приложения без создания нового окна с отключением
обработки сочетания клавиш ^C. Если приложение не
обрабатывает сочетание клавиш ^C самостоятельно,
единственным способом его прерывания является
использование сочетания клавиш ^Break.
I Новой средой станет исходная среда, переданная
cmd.exe, а не текущая среда.
MIN Запуск команды/программы в свернутом окне.
MAX Запуск команды/программы в развернутом окне.
SEPARATE Запуск 16-разрядной программы Windows в отдельной
области памяти.
SHARED Запуск 16-разрядной программы Windows в общей
области памяти.
LOW Запуск приложения с приоритетом IDLE.
NORMAL Запуск приложения с приоритетом NORMAL.
HIGH Запуск приложения с приоритетом HIGH.
REALTIME Запуск приложения с приоритетом REALTIME.
WAIT Запуск приложения с ожиданием его завершения.
ABOVENORMAL Запуск приложения с классом приоритета ABOVENORMAL
BELOWNORMAL Запуск приложения с классом приоритета BELOWNORMAL
команда/программа
Если это внутренняя команда cmd.exe или пакетный файл,
обработчик команд (cmd.exe) запускается с ключом /K.
Это означает, что окно не будет закрыто после завершения
команды.

Если это не внутренняя команда cmd.exe и не пакетный файл,
значит, это программа, которая будет запущена в графическом
или текстовом окне.

параметры Параметры, передаваемые команде/программе.


Изменения вызова внешних команд из командной строки или с помощью команды
START при включении расширенной обработки команд:

Для вызова неисполняемых файлов через механизм сопоставления типов файлов
достаточно просто ввести имя файла в командной строке. Например, команда
WORD.DOC запускает приложение, сопоставленное расширению имени файла .DOC.
Сведения о создании подобных сопоставлений из пакетных файлов приведены
в описаниях команд ASSOC и FTYPE.

При запуске 32-разрядного приложения с графическим интерфейсом пользователя
обработчик команд CMD.EXE не ожидает завершения работы приложения перед
возвратом к приглашению командной строки. Подобное новое поведение НЕ
относится к запуску приложений из пакетных файлов.

При выполнении командной строки, первым элементом которой является текстовая
строка "CMD" без расширения имени файла или указания пути, она заменяется
значением переменной COMSPEC. Это предотвращает запуск CMD.EXE из
текущей активной папки, если таковая программа там имеется.

Если первый элемент командной строки не содержит расширения имени файла,
обработчик команд CMD.EXE использует значение переменной среды PATHEXT,
чтобы определить расширения имен исполняемых файлов и порядок поиска
нужного файла. По умолчанию для переменной PATHEXT задается
значение:

.COM;.EXE;.BAT;.CMD

Обратите внимание, что этот синтаксис подобен синтаксису для переменной
PATH, то есть отдельные элементы разделяются точкой с запятой.

Если при поиске исполняемого файла нет соответствия ни одному из расширений,
выполняется проверка соответствия указанного имени папки. Если имя папки
соответствует указанному, то команда START запускает EXPLORER для этого
пути. Если такое действие выполняется из командной строки, то оно
эквивалентно выполнению команды CD /D для указанного пути.
 
Ш

Штурман

А как сделать чтоб батник сам прописывал путь в реестре откуда его запустили?

reg add "HKEY_CURRENT_USER.................. /v "%путь где лежит батник%\open.exe"

Вот какой командой? перепробовал %dir% %current% %currentdir% не хочет путь прописывать....

Не много ли ты хочешь от командных файлов cmd.exe?... можно воспользоваться параметром командной строки %0. Но еще придется обрезать имя самого сценария... как это сделать в KiXtart, VBScript, JScript или PowerShell-е я еще представляю... но вот в cmd.exe вроде нет такой функции.

Тут уже проще на нормальном языки написать программу.
 

Crammer

Ословед
Есть ли команда вывода на экран текущего времени ?

Просто кое что чем я занимаюсь компилируется через бат файл, и компилируется довольно долго. Бывает ставлю компилиться а сам ухожу от компа, а когда прихожу хочется знать когда кончилась компиляция.
 

GameFanat

Ословед
товарищи, я год назад гдето умел, забыл всё, напишите пример ввода текста в переменную, и его использование например в echo
 

MahMahoritos

Ословед
Подскажите, как с помощью .bat файла реализовать копирование папки со всем содержимым из места А (адрес на жестком диске) в место Б (флешка) с заменой уже имеющихся файлов.
 

HD Radio

HDR | LOUNGE & CHILL [AAC-LC 192 kbps]
  • Сверху