Добавлено спустя 13 часов 1 минуту 30 секунд:
Ну, товарищи, чего игнорируете?

Модератор: Модераторы
program ip_addr;
{$MODE OBJFPC}
uses libc;
function GetIPAddressOfInterface( if_name:ansistring):ansistring;
var
ifr : ifreq;
sock : longint;
p:pChar;
begin
Result:='0.0.0.0';
strncpy( ifr.ifr_ifrn.ifrn_name, pChar(if_name), IF_NAMESIZE-1 );
ifr.ifr_ifru.ifru_addr.sa_family := AF_INET;
sock := socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if ( sock >= 0 ) then begin
if ( ioctl( sock, SIOCGIFADDR, @ifr ) >= 0 ) then begin
p:=inet_ntoa( ifr.ifr_ifru.ifru_addr.sin_addr );
if ( p <> nil ) then Result := p;
end;
libc.__close(sock);
end;
end;
var
i:LongInt;
begin
if (ParamCount>0)
then for i:=1 to ParamCount
do WriteLn(GetIPAddressOfInterface(ParamStr(i)))
else WriteLn('Usage:', ParamStr(0), '<interface-name>')
end.
C:\Program Files\Far Manager>route print
===========================================================================
Список интерфейсов
0x1 ........................... MS TCP Loopback interface
0x2 ...00 11 d8 40 4d 44 ...... Realtek RTL8139/810x Family Fast Ethernet NIC #2 -
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.1.229 192.168.1.239 20
74.125.143.102 255.255.255.255 192.168.1.229 192.168.1.239 20
87.250.251.119 255.255.255.255 192.168.1.229 192.168.1.239 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.1.0 255.255.255.0 192.168.1.239 192.168.1.239 20
192.168.1.239 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.1.255 255.255.255.255 192.168.1.239 192.168.1.239 20
224.0.0.0 240.0.0.0 192.168.1.239 192.168.1.239 20
255.255.255.255 255.255.255.255 192.168.1.239 192.168.1.239 1
Основной шлюз: 192.168.1.229
ifconfig | grep "inet addr:" | awk '{print $2}' | awk -F ":" '{print $2}'
route print
===========================================================================
Список интерфейсов
11...f4 6d 04 73 91 9d ......Realtek PCIe GBE Family Controller
1...........................Software Loopback Interface 1
22...00 00 00 00 00 00 00 e0 Адаптер Microsoft ISATAP
12...00 00 00 00 00 00 00 e0 Teredo Tunneling Pseudo-Interface
===========================================================================
IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.162 20
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
127.255.255.255 255.255.255.255 On-link 127.0.0.1 306
192.168.1.0 255.255.255.0 On-link 192.168.1.162 276
192.168.1.162 255.255.255.255 On-link 192.168.1.162 276
192.168.1.255 255.255.255.255 On-link 192.168.1.162 276
224.0.0.0 240.0.0.0 On-link 127.0.0.1 306
224.0.0.0 240.0.0.0 On-link 192.168.1.162 276
255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
255.255.255.255 255.255.255.255 On-link 192.168.1.162 276
===========================================================================
Постоянные маршруты:
Сетевой адрес Маска Адрес шлюза Метрика
0.0.0.0 0.0.0.0 5.0.0.1 По умолчанию
===========================================================================
IPv6 таблица маршрута
===========================================================================
Активные маршруты:
Метрика Сетевой адрес Шлюз
1 306 ::1/128 On-link
11 276 fe80::/64 On-link
11 276 fe80::c50b:cdf1:fa2e:c5e1/128
On-link
1 306 ff00::/8 On-link
11 276 ff00::/8 On-link
===========================================================================
Постоянные маршруты:
Метрика Сетевой адрес Шлюз
0 4294967295 2620:9b::/96 On-link
===========================================================================
Решение на "GetIPAddressOfInterface( if_name:ansistring):ansistring;" страдает тем,что сперва нужно получить список инетерфейсов - чтобы потом для каждого вызывать эту функцию.
project1.lpr(0,0) Fatal: Can not find unit libc used by ip_addr.
Можно взять модули из Network traffic monitor или NetwrokTrafficMeter
Function GetLocalIP : String;
Var
WSAData: TWSAData;
P: PHostEnt;
Name: array[0..$FF] of Char;
Begin
WSAStartup($0101, WSAData);
GetHostName(Name, $FF);
P := GetHostByName(Name);
Result := inet_ntoa(PInAddr(P.h_addr_list^)^);
WSACleanup;
End;
Ну извини, других бананьев у меня для тебя нема.trexxet писал(а):Можно взять модули из Network traffic monitor или NetwrokTrafficMeter
Там сплошной непрокомменитрованный код, а Traffic Monitor вообще неверные показания дает, точней он ничего не выдает.
Других идей нет?
Если речь идёт только о Windows, то можно сделать что-то вроде этого:
Открываешь этот мсдн и читаешь про апишные функции, которые в IPHLPAPI.pas/IPHelper.pas используются.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234