系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
早7点
- 帖子: 41
- 注册时间: 2007-06-21 11:00
#1
帖子
由 早7点 » 2007-07-10 17:01
前面那三个用ifconfig好像能查到,但是小弟我想在自己程序里用,所以请达人给指点下,或者给贴一下ifconfig的源码也行
另外网关怎么获得呢?
-
早7点
- 帖子: 41
- 注册时间: 2007-06-21 11:00
#3
帖子
由 早7点 » 2007-07-10 17:08
有人说在什么etc\config还是什么地方有系统的配置信息可以查到?
有知道的达人路过么。。。
我机器上没安Ubuntu,通过telnet上别人机器,所以不方便查看那些文件。。。
-
早7点
- 帖子: 41
- 注册时间: 2007-06-21 11:00
#4
帖子
由 早7点 » 2007-07-10 17:39
下班了,顶一下。。。
-
xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
#5
帖子
由 xhy » 2007-07-11 20:55
代码: 全选
#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多万
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#6
帖子
由 eexpress » 2007-07-11 20:56
/proc下面没信息???要这样???
● 鸣学
-
drivel
- 帖子: 1918
- 注册时间: 2006-07-08 9:21
- 来自: University of Science and Technology Beijing
-
联系:
#7
帖子
由 drivel » 2007-07-11 21:01
直接读取interface不一定能读出dhcp得到的信息吧
-
xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
#9
帖子
由 xhy » 2007-07-12 2:28
翻了一下ifconfig和route的源代码
获取MAC地址和IP分两大步
1 读取/proc/net/dev文件 获得网络设备的名字
2 根据名字调用ioctl系列函数获得MAC, IP, MTU, METRIC等信息
获取路由则比较方便
直接读取/proc/net/route就可以了
目前负债150多万
-
eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
#10
帖子
由 eexpress » 2007-07-12 9:00
/etc/iftab 下面不有mac?
lin的思维,应该都是直接读文件就是。
● 鸣学
-
xhy
- 帖子: 3916
- 注册时间: 2005-12-28 1:16
- 系统: Ubuntu 12.10 X64
- 来自: 火星
#11
帖子
由 xhy » 2007-07-12 9:23
/etc/iftab是Ubuntu特有的配置文件
如果要读各个发行版格式都不同的配置文件
在做格式解析时 会有更多的工作要作 不如一行ioctl来的方便了
何况不能预计一些发行版会用什么格式去存放 甚至存在不存在同类文件
目前负债150多万
-
早7点
- 帖子: 41
- 注册时间: 2007-06-21 11:00
#12
帖子
由 早7点 » 2007-07-12 15:44
啊,先谢过
虽然还是没太弄清楚。。。不过先去实践一下啦。
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, SIOCGIFADDR, &ifr)
ioctl(sock, SIOCGIFNETMASK, &ifr)
分别是ip和掩码
mac地址的不知道用哪个