linux узнать свой IP

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

linux узнать свой IP

Сообщение Attid »

linux узнать свой IP если несколько сетевых интерфейсов то все.
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

Yogrik
постоялец
Сообщения: 116
Зарегистрирован: 22.03.2006 23:41:48

Сообщение Yogrik »

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.
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Yogrik
о погоняю, после выходных.

но все же интересно что я не правельно с FpPipe сделал что ничего не получаю. =(
Ответить