linux узнать свой IP
Модератор: Модераторы
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
linux узнать свой IP
linux узнать свой IP если несколько сетевых интерфейсов то все.
Может поможет?
http://arcw.comptek.ru/aqua/man/ifconfig.html
http://arcw.comptek.ru/aqua/man/ifconfig.html
Attid писал(а):linux узнать свой IP если несколько сетевых интерфейсов то все.
Наиболее правильный способ спросить у ядра, но почему-то даже сишные программеры не жалуют этот способ.....
У меня получилось как-то так.....
Код: Выделить всё
program ip;
{$mode objfpc}
uses Classes, SysUtils, libc;
var
i : integer;
ls : TStringList;
function getLocalIpList:TStringList;
var
listDevInfo,listDev,ipList : TStringList;
i : integer;
sfp : longint;
req : TIfreq;
begin
result := nil;
listDevInfo := TStringList.Create;
listDev := TStringList.Create;
try
listDevInfo.loadFromFile('/proc/net/dev');
for i:=2 to listDevInfo.count - 1 do
listDev.Append(Trim(LeftStr(listDevInfo[i],pos(':',listDevInfo[i])-1)));
sfp := socket(AF_INET,SOCK_DGRAM,0);
if sfp>-1 then
begin
ipList := TStringList.Create;
for i:=0 to listDev.count - 1 do
begin
req.ifr_ifrn.ifrn_name := PChar(listDev[i]);
if ioctl(sfp,SIOCGIFADDR,@req) > -1 then
ipList.Append(inet_ntoa(req.ifr_ifru.ifru_addr.sin_addr));
end;
result := ipList;
end
else
writeln('Can''t create socket');
finally
FreeAndNil(listDevInfo);
FreeAndNil(listDev);
end;
end;
begin
ls := GetLocalIpList;
if ls<>Nil then
for i:=0 to ls.count - 1 do
writeln(ls[i]);
end.
