[问题]Linux下如何用C语言获得网络信息,比如IP,掩码,mac地址,网关
发表于 : 2007-07-10 17:01
前面那三个用ifconfig好像能查到,但是小弟我想在自己程序里用,所以请达人给指点下,或者给贴一下ifconfig的源码也行
另外网关怎么获得呢?

另外网关怎么获得呢?
代码: 全选
#include <stdio.h>
#include <stdlib.h>
int main( )
{
FILE* netinfo = popen("/sbin/ifconfig", "r");
if(!netinfo){
puts("error while open pipe");
exit(1);
}
char str[200];
while( fgets(str, 199, netinfo) != NULL ){
printf("%s", str);
}
pclose(netinfo);
}
代码: 全选
int sock;
struct sockaddr_in sin;
struct ifreq ifr;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
{
perror("socket");
return -1;
}
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = 0;
if ([color=red]ioctl(sock, SIOCGIFADDR, &ifr)[/color] < 0)
{
perror("ioctl");
return -1;
}
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
ip[0] = (char)(sin.sin_addr.s_addr >> 0 );
ip[1] = (char)(sin.sin_addr.s_addr >> 8 );
ip[2] = (char)(sin.sin_addr.s_addr >> 16 );
ip[3] = (char)(sin.sin_addr.s_addr >> 24 );
if [color=red](ioctl(sock, SIOCGIFNETMASK, &ifr)[/color] < 0)
{
perror("ioctl");
return -1;
}
memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
mask[0] = (char)(sin.sin_addr.s_addr >> 0 );
mask[1] = (char)(sin.sin_addr.s_addr >> 8 );
mask[2] = (char)(sin.sin_addr.s_addr >> 16 );
mask[3] = (char)(sin.sin_addr.s_addr >> 24 );