URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3641
[ Назад ]

Исходное сообщение
"Почему не берётся адрес сетевого интерфейса в программе на Си?"

Отправлено Андрей , 25-Ноя-04 20:08 
Не могу взять адрес сетевого интерфейса. Может кто посоветует что?(где копать или в чём ошибся).
Заранее благодарю.

Вот текст прграммы:

----------------------------------------

#include <linux/types.h>
#include <linux/socket.h>
#include <linux/ioctl.h>
#include <linux/if.h>
#include <linux/in.h>


char * intf = "eth0";


int main ()
{

struct ifparam
{
  __u32 ip;
  __u32 mask;
  int mtu;
  int index;
} ifp;


  int fd;
  struct sockaddr_in s;
  struct ifreq ifr;

  memset ((void *)&ifr, 0, sizeof (struct ifreq));
  if ((fd = socket (AF_INET, SOCK_DGRAM, 0))<0)
    return -1;
  
  sprintf (ifr.ifr_name, "%s", intf);
  
  memset ((void *)&s, 0, sizeof (struct sockaddr_in));
  memcpy ((void *)&s, (void *)&ifr.ifr_addr, sizeof (struct sockaddr_in));
  memcpy ((void *)&ifp.ip, (void *)&s.sin_addr.s_addr, sizeof (__u32));

  printf ("%s\n", inet_ntoa(ifp.ip));

  return ifp.ip;
}
-----------------------------------------------------------
Вот вывод программы: 0.0.0.0

Почему так?

С уважением,
Андрей.


Содержание

Сообщения в этом обсуждении
"Почему не берётся адрес сетевого интерфейса в программе на С..."
Отправлено lunc , 26-Ноя-04 13:44 
>  memset ((void *)&ifr, 0, sizeof (struct ifreq));
>  if ((fd = socket (AF_INET, SOCK_DGRAM, 0))<0)
>    return -1;
>
>  sprintf (ifr.ifr_name, "%s", intf);
>
>  memset ((void *)&s, 0, sizeof (struct sockaddr_in));
>  memcpy ((void *)&s, (void *)&ifr.ifr_addr, sizeof (struct sockaddr_in));
>  memcpy ((void *)&ifp.ip, (void *)&s.sin_addr.s_addr, sizeof (__u32));

Ты же здесь ничег не далаешь. Берешь поля из пустойструктуры.

Здесь это разбиралась:
http://www.linux.org.ru/view-message.jsp?msgid=718999&back=g...


"Почему не берётся адрес сетевого интерфейса в программе на С..."
Отправлено Андрей , 27-Ноя-04 13:17 
>
>Ты же здесь ничег не далаешь. Берешь поля из пустойструктуры.
>
>Здесь это разбиралась:
>http://www.linux.org.ru/view-message.jsp?msgid=718999&back=g...

Спасибо.


"Почему не берётся адрес сетевого интерфейса в программе на С..."
Отправлено Bob , 26-Ноя-04 19:44 
Ты забыл вызвать ioctl.

"Почему не берётся адрес сетевого интерфейса в программе на С..."
Отправлено Андрей , 27-Ноя-04 13:17 
>Ты забыл вызвать ioctl.

Спасибо.