Просмотр полной версии : Получение всех ip-адресов компа на delphi.
Proger10
29.10.2009, 11:03
Как можно получить все ip адреса компа (а вдруг у юзера несколько (больше одного) сетевых адаптеров)??
ЗЫ Инди не подойдет - много весит!
mailbrush
29.10.2009, 11:22
Регулярками выдрать из ipconfig'а...
ЗЫ Инди не подойдет - много весит!о_О, а инди тут при чем?
Proger10
29.10.2009, 16:25
Регулярками выдрать из ipconfig'а...
о_О, а инди тут при чем?
Там есть IdIpAddrMon.
ЗЫ Я от него и хочу избввится - сейчас он у меня используется.
Тема не в том разделе создана
Proger10
29.10.2009, 16:54
Если это тонкий намек на то, что мне в [Delphi]/[Pascal] Задай вопрос, получи ответ (http://forum.antichat.ru/thread39636.html), то уж извеняйте!! , а если нет, то я непонял....
И всё-же по теме??
Пытался код из индюка вытащить - получилось что-то унылое... и вылетающее по причине Access violation
можно через сырые сокеты делать это типа так:
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;
P.S. в 5005 статей по Delphi есть статейка
Получение IP-адреса и маски для всех сетевых интерфейсов
Gray_Wolf
29.10.2009, 17:46
Не проще ли в CMD написать ipconfig /all а потом отпарсить результат...
2 Gray_Wolf нет не проще. Это самый быстрый способ. Да и не очень то и большой. А вот запустить программу, получить её вывод и отпарсить - это однако боле напряжнее на систему. Тыже чтобы сложит в программа 5+6 не запускаеш калькулятор, не вставляеш туда данные и не эмулируеш нажатия на кнопку Enter
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot