
29.10.2009, 17:14
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
можно через сырые сокеты делать это типа так:
Код:
var
n_addr : integer; // Хранит кол-во найденный интерфейсов
n, a : integer; // Дополнительные переменные
raw_socket:tsocket; // Переменная для создания сокета
WSData:tWSAData; // Переменная для инициализации библиотеки сокетов
llist:packed record
iAddressCount : Integer;
Address : Array [0..10] of SOCKET_ADDRESS;
end;
begin
// инициализация библиотеки сокетов
if WSAStartup($202, WSData)<>0 then Errors('[-] WSAStartup'+#13#10) else Oks('[+] WSAStartup'+#13#10);
// создание сокета
raw_socket:=socket(AF_INET, SOCK_RAW, IPPROTO_IP);
// проверка на ошибки
if raw_socket=INVALID_SOCKET then Errors('[-] Create RAW socket'+#13#10) else Oks('[+] Create RAW socket'+#13#10);
// получаем все интерфейсы? что есть на компьютере.
if WSAIoctl(raw_socket, SIO_ADDRESS_LIST_QUERY, nil, 0,@llist, 1024, @n, nil, nil)=SOCKET_ERROR then
Errors('[-] WSAIoctl'+#13#10) else Oks('[+] WSAIoctl'+#13#10);
n_addr:=llist.iAddressCount; // получение количества интерфейсов
// если кол-во интерфейсов=0, то ошибка
if n_addr=0 then Errors('[-] Interface count: 0'+#13#10) else Oks('[+] Interface count: '+inttostr(n_addr)+#13#10);
// вывод IP-адресов всех найденных интерфейсов
for a:=0 to n_addr-1 do begin
s:=inet_ntoa(llist.Address[a].lpSockaddr.sin_addr);
Oks(' Interface fount: '+s+#13#10);
end;
Последний раз редактировалось slesh; 29.10.2009 в 17:17..
|
|
|