The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Почему не берётся адрес сетевого интерфейса в программе на С..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

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

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

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

#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

Почему так?

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Почему не берётся адрес сетевого интерфейса в программе на С..."
Сообщение от lunc Искать по авторуВ закладки(??) on 26-Ноя-04, 13:44  (MSK)
>  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=group.jsp%3Fgroup%3D4066

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Почему не берётся адрес сетевого интерфейса в программе на С..."
Сообщение от Bob Искать по авторуВ закладки(??) on 26-Ноя-04, 19:44  (MSK)
Ты забыл вызвать ioctl.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Почему не берётся адрес сетевого интерфейса в программе на С..."
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 27-Ноя-04, 13:17  (MSK)
>Ты забыл вызвать ioctl.

Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру