[问题]Linux下如何用C语言获得网络信息,比如IP,掩码,mac地址,网关
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 41
- 注册时间: 2007-06-21 11:00
[问题]Linux下如何用C语言获得网络信息,比如IP,掩码,mac地址,网关
前面那三个用ifconfig好像能查到,但是小弟我想在自己程序里用,所以请达人给指点下,或者给贴一下ifconfig的源码也行
另外网关怎么获得呢?
另外网关怎么获得呢?
-
- 帖子: 202
- 注册时间: 2007-01-13 22:39
- 来自: 杭州
-
- 帖子: 41
- 注册时间: 2007-06-21 11:00
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
代码: 全选
#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);
}
目前负债150多万
- drivel
- 帖子: 1918
- 注册时间: 2006-07-08 9:21
- 来自: University of Science and Technology Beijing
- 联系:
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
- xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
-
- 帖子: 41
- 注册时间: 2007-06-21 11:00
啊,先谢过
虽然还是没太弄清楚。。。不过先去实践一下啦。
xhy9楼说的是不是类似这种:
ioctl(sock, SIOCGIFADDR, &ifr)
ioctl(sock, SIOCGIFNETMASK, &ifr)
分别是ip和掩码
mac地址的不知道用哪个
虽然还是没太弄清楚。。。不过先去实践一下啦。
xhy9楼说的是不是类似这种:
代码: 全选
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 );
ioctl(sock, SIOCGIFNETMASK, &ifr)
分别是ip和掩码
mac地址的不知道用哪个