ALT Linux Community general discussions
 help / color / mirror / Atom feed
* [mdk-re] Linux Programming: получить список адресов
@ 2002-03-01 17:26 Mikhail Nikitin
  2002-03-01 17:53 ` Sergey Vlasov
  2002-03-01 21:36 ` [mdk-re] " Aleksandr Blohin
  0 siblings, 2 replies; 5+ messages in thread
From: Mikhail Nikitin @ 2002-03-01 17:26 UTC (permalink / raw)
  To: ALT Linux Mailing List

Здравствуйте господа!

Пишется некоторая программа на С++ (исп. libCommmonC++).
Есть некоторое желание получить список всех текущих IP-адресов (и,
желательно, девайсов, не глядя в /proc/net/dev). 
Как бы это дело обстряпать получше?

(варианты с С, Perl, awk, etc.. не предлагать ;-)

Михаил
-- 
UNIX is very user friendly.
It's just very selective about who its friends are.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [mdk-re] Linux Programming: получить список адресов
  2002-03-01 17:26 [mdk-re] Linux Programming: получить список адресов Mikhail Nikitin
@ 2002-03-01 17:53 ` Sergey Vlasov
  2002-03-01 18:15   ` Mikhail Nikitin
  2002-03-01 21:36 ` [mdk-re] " Aleksandr Blohin
  1 sibling, 1 reply; 5+ messages in thread
From: Sergey Vlasov @ 2002-03-01 17:53 UTC (permalink / raw)
  To: mandrake-russian

On Fri, 1 Mar 2002 17:34:34 +0300
Mikhail Nikitin <mouse@uslugionline.ru> wrote:

> Пишется некоторая программа на С++ (исп. libCommmonC++).
> Есть некоторое желание получить список всех текущих IP-адресов (и,
> желательно, девайсов, не глядя в /proc/net/dev). 
> Как бы это дело обстряпать получше?
> 
> (варианты с С, Perl, awk, etc.. не предлагать ;-)

Ну, есть такой вариант (info libc "Interface Naming"):

#include <net/if.h>
struct if_nameindex * if_nameindex (void);

После чего доставать конфигурацию через SIOCGIF... - например,
как это делает ifconfig (apt-get source net-tools,
lib/interface.c).

Хотя я не уверен, что if_nameindex работает не через
/proc/net/dev - по крайней мере, ifconfig работает через него.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [mdk-re] Linux Programming: получить список адресов
  2002-03-01 17:53 ` Sergey Vlasov
@ 2002-03-01 18:15   ` Mikhail Nikitin
  0 siblings, 0 replies; 5+ messages in thread
From: Mikhail Nikitin @ 2002-03-01 18:15 UTC (permalink / raw)
  To: mandrake-russian

On Fri, Mar 01, 2002 at 06:13:48PM +0300, Sergey Vlasov wrote:
> On Fri, 1 Mar 2002 17:34:34 +0300
> Mikhail Nikitin <mouse@uslugionline.ru> wrote:
> 
> > Пишется некоторая программа на С++ (исп. libCommmonC++).
> > Есть некоторое желание получить список всех текущих IP-адресов (и,
> > желательно, девайсов, не глядя в /proc/net/dev). 
> > Как бы это дело обстряпать получше?
> > 
> > (варианты с С, Perl, awk, etc.. не предлагать ;-)
> 
> Ну, есть такой вариант (info libc "Interface Naming"):
> 
> #include <net/if.h>
> struct if_nameindex * if_nameindex (void);

Спасибо, список девайсов я получил можно сказать...

> После чего доставать конфигурацию через SIOCGIF... - например,

Как это (где читать)?

> как это делает ifconfig (apt-get source net-tools,
> lib/interface.c).
Смотрел... хардкорный, конечно вариант...хочется попроще..

> Хотя я не уверен, что if_nameindex работает не через
> /proc/net/dev - по крайней мере, ifconfig работает через него.
Неправда.
То есть у него есть 2 варианта - либо через /proc/net/dev либо через
syscall.


Михаил
-- 
UNIX is very user friendly.
It's just very selective about who its friends are.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [mdk-re] Re: [mdk-re] Linux Programming: получить список адресов
  2002-03-01 17:26 [mdk-re] Linux Programming: получить список адресов Mikhail Nikitin
  2002-03-01 17:53 ` Sergey Vlasov
@ 2002-03-01 21:36 ` Aleksandr Blohin
  2002-03-02 12:52   ` Mikhail Nikitin
  1 sibling, 1 reply; 5+ messages in thread
From: Aleksandr Blohin @ 2002-03-01 21:36 UTC (permalink / raw)
  To: mandrake-russian

[-- Attachment #1: Type: text/plain, Size: 759 bytes --]

On Fri, 1 Mar 2002 17:34:34 +0300
Mikhail Nikitin <mouse@uslugionline.ru> wrote:

MN> Здравствуйте господа!

MN> Пишется некоторая программа на С++ (исп. libCommmonC++).
MN> Есть некоторое желание получить список всех текущих IP-адресов (и,
MN> желательно, девайсов, не глядя в /proc/net/dev). 
MN> Как бы это дело обстряпать получше?

MN> (варианты с С, Perl, awk, etc.. не предлагать ;-)

MN> Михаил
MN> -- 
MN> UNIX is very user friendly.
MN> It's just very selective about who its friends are.

MN> _______________________________________________
MN> Mandrake-russian mailing list
MN> Mandrake-russian@altlinux.ru
MN> http://altlinux.ru/mailman/listinfo/mandrake-russian

--
Best regards
AB
--
				... In nomine Altli, et Ctrli, et Spititus Deli, Reset!


[-- Attachment #2: localaddr.c --]
[-- Type: text/plain, Size: 1322 bytes --]

# include <stdio.h>
# include <stdlib.h>
# include <errno.h>
# include <unistd.h>
# include <sys/types.h>

# include <sys/socket.h>
# include <net/if.h>
# include <sys/ioctl.h>
# include <netinet/in.h>
# include <arpa/inet.h>

int main(int argc, char* argv[]){
  struct ifconf ifc;
  struct ifreq *ifr, ifrcopy;
  int flags;
  char *buf, *ptr;
  int len;
  int sockfd;
  struct sockaddr_in *sad;

  sockfd = socket(AF_INET,SOCK_DGRAM,0);

  if ( sockfd == -1 ) {
    perror ("socket");
    return 1;
  }

  len = 100 * sizeof(struct ifreq);
  buf = malloc(len);
  ifc.ifc_len = len;
  ifc.ifc_buf = buf;
  if ( ioctl(sockfd, SIOCGIFCONF, &ifc ) == -1) {
    if ( errno != EINVAL ) {
      perror("ioctl");
      return 2;
    }
    else
      printf("not all interfaces fit in buf\n");
  }
  for (ptr = buf; ptr < buf + ifc.ifc_len; ){
    ifr = (struct ifreq *)ptr;
# if 1
    ptr += sizeof (ifr->ifr_name) + sizeof(struct sockaddr);
# else
    ptr += sizeof (ifr->ifr_name) + ifr->ifr_addr.sa_len;
# endif

    ifrcopy = *ifr;
    ioctl(sockfd,SIOCGIFFLAGS,&ifrcopy);
    flags = ifrcopy.ifr_flags;

    if ( (flags & IFF_UP) == 0 ) continue; /* interface is down */

    sad = (struct sockaddr_in *)(&ifr->ifr_addr);
    printf("%s %s\n", ifr->ifr_name, 
	              inet_ntoa( sad->sin_addr) );

  }
  return 0;
}


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [mdk-re] Re: [mdk-re] Linux Programming: получить список адресов
  2002-03-01 21:36 ` [mdk-re] " Aleksandr Blohin
@ 2002-03-02 12:52   ` Mikhail Nikitin
  0 siblings, 0 replies; 5+ messages in thread
From: Mikhail Nikitin @ 2002-03-02 12:52 UTC (permalink / raw)
  To: mandrake-russian

On Fri, Mar 01, 2002 at 08:30:12PM +0200, Aleksandr Blohin wrote:
> On Fri, 1 Mar 2002 17:34:34 +0300
> Mikhail Nikitin <mouse@uslugionline.ru> wrote:
> 
> MN> Здравствуйте господа!
> 
> MN> Пишется некоторая программа на С++ (исп. libCommmonC++).
> MN> Есть некоторое желание получить список всех текущих IP-адресов (и,
> MN> желательно, девайсов, не глядя в /proc/net/dev). 
> MN> Как бы это дело обстряпать получше?
> }
> 
Большое всем спасибо!

Михаил
-- 
UNIX is very user friendly.
It's just very selective about who its friends are.



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-03-02 12:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-03-01 17:26 [mdk-re] Linux Programming: получить список адресов Mikhail Nikitin
2002-03-01 17:53 ` Sergey Vlasov
2002-03-01 18:15   ` Mikhail Nikitin
2002-03-01 21:36 ` [mdk-re] " Aleksandr Blohin
2002-03-02 12:52   ` Mikhail Nikitin

ALT Linux Community general discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
		mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
	public-inbox-index community

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.community


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git