- 浏览: 18993 次
最新评论
一个类似ifconfig功能的程序代码--C语言(ZZ)
2010年07月30日
001 #include
002 #include
003 #include
004 #include
005 #include
006 #include
007 #include
008 #include
009
010 int info_list(int all);
011
012 int get_interface_info(char *interface_name);
013 int set_interface(char *interface_name);
014 int get_ipaddr(char *interface_name);
015 int get_mac(char *interface_name);
016 int get_netmask(char *interface_name);
017 int get_broadcast(char *interface_name);
018 int set_ipaddr(char *interface_name, char *ip);
019 int set_mac(char *interface_name, char *mac);
020 int set_netmask(char *interface_name, char *netmask);
021 int set_broadcast(char *interface_name, char *broadcast);
022
023 int interface_up(char *interface_name);
024 int interface_down(char *interface_name);
025
026 int usage();
027
028 int main(int argc, char *argv[])
029 {
030 if (argc == 1)
031 {
032 info_list(0);
033 return 0;
034 }
035
036 if (argc == 2)
037 {
038 if (strcmp(argv[1], "all") == 0)
039 {
040 info_list(1);
041 return 0;
042 }
043
044 get_interface_info(argv[1]);
045
046 return 0;
047 }
048
049 if (argc == 3)
050 {
051 if (strcmp(argv[2], "set") == 0)
052 {
053 set_interface(argv[1]);
054 return 0;
055 }
056 if (strcmp(argv[2], "up") == 0)
057 {
058 interface_up(argv[1]);
059 return 0;
060 }
061 if (strcmp(argv[2], "down") == 0)
062 {
063 interface_down(argv[1]);
064 return 0;
065 }
066
067 usage();
068
069 return 0;
070 }
071
072 usage();
073
074 return 0;
075 }
076
077 int info_list(int all)
078 {
079 int len;
080 char *ifreq_pointer;
081 len = 10 * sizeof(struct ifreq);
082 ifreq_pointer = (char *) malloc(len);
083
084 struct ifconf get_info;
085 get_info.ifc_len = len;
086 get_info.ifc_ifcu.ifcu_buf = ifreq_pointer;
087
088 int sockfd;
089 sockfd = socket(PF_INET, SOCK_STREAM, 0);
090 ioctl(sockfd, SIOCGIFCONF, &get_info);
091
092 int count;
093 count = get_info.ifc_len / sizeof(struct ifreq);
094
095 struct sockaddr_in *return_sockaddr;
096
097 struct ifreq *result = (struct ifreq *) ifreq_pointer;
098 int i = 0;
099 if (all == 1)
100 {
101 for (i; i ifr_name);
104 get_ipaddr(result->ifr_name);
105 get_mac(result->ifr_name);
106 get_netmask(result->ifr_name);
107 get_broadcast(result->ifr_name);
108 }
109 } else
110 {
111 struct ifreq tmp;
112 int s;
113 if ((s = socket(PF_INET, SOCK_STREAM, 0)) ifr_name);
122 if (ioctl(s, SIOCGIFFLAGS, &tmp) socket(PF_INET, SOCK_STREAM, 0)) sin_addr));
162
163 return 0;
164 }
165
166 int get_mac(char *interface_name)
167 {
168 if (strcmp(interface_name, "lo") == 0)
169 {
170 return 0;
171 }
172
173 int s;
174
175 if ((s = socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) sin_addr));
222
223 return 0;
224 }
225
226 int get_broadcast(char *interface_name)
227 {
228 int s;
229
230 if ((s = socket(PF_INET, SOCK_STREAM, 0)) sin_addr));
249
250 return 0;
251
252 }
253
254 int get_interface_info(char *interface_name)
255 {
256 get_ipaddr(interface_name);
257 get_mac(interface_name);
258 get_netmask(interface_name);
259 get_broadcast(interface_name);
260
261 return 0;
262 }
263
264 int set_interface(char *interface_name)
265 {
266 char ip[18];
267 char mac_addr[20];
268 char netmask[18];
269 char broadcast[18];
270
271 printf("Change ");
272 get_ipaddr(interface_name);
273 printf("To: ");
274 fgets(ip, 17, stdin);
275 if (strcmp(ip, "\n") == 0)
276 goto set_mac;
277 set_ipaddr(interface_name, ip);
278
279 set_mac:
280 printf("Change ");
281 get_mac(interface_name);
282 printf("To: ");
283 fgets(mac_addr, 19, stdin);
284 if (strcmp(mac_addr, "\n") == 0)
285 goto set_netmask;
286 set_mac(interface_name, mac_addr);
287
288 set_netmask:
289 printf("Change ");
290 get_netmask(interface_name);
291 printf("To: ");
292 fgets(netmask, 17, stdin);
293 if (strcmp(netmask, "\n") == 0)
294 goto set_broadcast;
295 set_netmask(interface_name, netmask);
296
297 set_broadcast:
298 printf("Change ");
299 get_broadcast(interface_name);
300 printf("To: ");
301 fgets(broadcast, 17, stdin);
302 if (strcmp(broadcast, "\n") == 0)
303 return 0;
304 set_broadcast(interface_name, broadcast);
305
306 return 0;
307 }
308
309 int interface_up(char *interface_name)
310 {
311 int s;
312
313 if ((s = socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) 47)
442 tmp = mac_addr - 48;
443 if (mac_addr 64)
444 tmp = mac_addr - 55;
445 if (mac_addr 96)
446 tmp = mac_addr - 87;
447 tmp = tmp 47)
449 tmp |= (mac_addr[i + 1] - 48);
450 if (mac_addr[i + 1] 64)
451 tmp |= (mac_addr[i + 1] - 55);
452 if (mac_addr[i + 1] 96)
453 tmp |= (mac_addr[i + 1] - 87);
454 memcpy(&ifr.ifr_ifru.ifru_hwaddr.sa_data[j++], &tmp, 1);
455 }
456
457 if (ioctl(s, SIOCSIFHWADDR, &ifr) socket(PF_INET, SOCK_STREAM, 0)) socket(PF_INET, SOCK_STREAM, 0)) < 0)
504 {
505 perror("Socket");
506 return -1;
507 }
508
509 struct ifreq ifr;
510 strcpy(ifr.ifr_name, interface_name);
511
512 struct sockaddr_in broadcast_addr;
513 bzero(&broadcast_addr, sizeof(struct sockaddr_in));
514 broadcast_addr.sin_family = PF_INET;
515 inet_aton(broadcast, &broadcast_addr.sin_addr);
516
517 memcpy(&ifr.ifr_ifru.ifru_broadaddr, &broadcast_addr,
518 sizeof(struct sockaddr_in));
519
520 if (ioctl(s, SIOCSIFBRDADDR, &ifr) < 0)
521 {
522 perror("ioctl");
523 return -1;
524 }
525
526 return 0;
527 }
528
529 int usage(void)
530 {
531 printf("Usage: myifconfig [all]|[interface [set|up|down]]\n");
532 return 0;
533 }
把每行开头的空格换成0
:%s/^\ /0/
去掉每行开头的行号(数字)
:%s/^[0-9]*//
发表评论
-
Java.lang.ThreadLocal类
2012-01-20 09:02 416Java.lang.ThreadLocal类 2010 ... -
.net 线程概述
2012-01-20 09:02 501.net 线程概述 2011年06月23日 概论 多线 ... -
Borland 基础与应用开发课程认证试题整理集
2012-01-20 09:02 603Borland 基础与应用开发课程认证试题整理集 2010年 ... -
windows x64 vista以上系统代码完整性校验分析
2012-01-20 09:02 1644windows x64 vista以上系统代码完整性校验分析 ... -
C1X系列: 多线程(N1494)
2012-01-20 09:02 716C1X系列: 多线程(N1494) 2010年08月03日 ... -
VBS整人代码 很多 测试把我给整安逸了
2012-01-19 14:06 2254VBS整人代码 很多 测试把我给整安逸了 2010年08月2 ... -
利用VBS让QQ永远在线
2012-01-19 14:06 557利用VBS让QQ永远在线 201 ... -
VBS Runas 自动明文的输入密码
2012-01-19 14:06 699VBS Runas 自动明文的输入密码 2010年06月23 ... -
VBS运用之妙用SendKeys
2012-01-19 14:06 905VBS运用之妙用SendKeys 2010年11月12日 ... -
了解VBE!VBS教程!
2012-01-19 14:06 684了解VBE!VBS教程! 2011年09 ... -
使用Windbg排除蓝屏故障(已发表)
2012-01-17 03:56 634使用Windbg排除蓝屏故障(已发表) 2011年09月28 ... -
系统的一些解决方法
2012-01-17 03:56 605系统的一些解决方法 20 ... -
2011-11-1
2012-01-17 03:56 4662011-11-1 2011年11月01日 第一篇:一 ... -
Linux下FrameBuffer直接写屏
2012-01-17 03:56 983Linux下FrameBuffer直接写屏 2011年09月 ... -
exe文件不能运行的解决方法
2012-01-17 03:56 1034exe文件不能运行的解决 ... -
Socket基础
2012-01-16 02:45 543Socket基础 2010年04月02日 Socket基 ... -
tcp简单实现C/S模式程序,测试成功
2012-01-16 02:44 1095tcp简单实现C/S模式程序,测试成功 2010年03月25 ... -
简单的C#Socket编程
2012-01-16 02:44 552简单的C#Socket编程 2009年06月23日 us ... -
用C#做远程监控程序
2012-01-16 02:44 3150用C#做远程监控程序 2009年12月05日 最近在做的 ...
相关推荐
3、确认是否安装ifconfig命令:在sbin目录中输入ls | grep ‘if’,没有则说明没有安装。 注:这里我已经安装了,如果没有安装则继续第4步。 4、安装net-tools,因为该包中包含ifconfig命令:sudo yum install ...
这个代码是unix net-tools 源码 本人需要ifconfig源码 ,所以将ifconfig 剥离了出来,并做了相应的修改,red-hat上编译通过。
详细介绍了ifconfig命令的用法
这个是我从nettools源码中剥离的ifconfig源码。 并且删除了ifconfig若干功能。只留下我使用的功能。 如果想增加ifconfig参数,可以查看nettools,增加参数
ifconfig-parser-解析 ifconfig 的输出,并更好的检索
1.命令简介 ifconfig(configure a network interface)命令是系统管理员命令,用于查看和配置网络接口。 2.命令格式 ifconfig [-v] [-a] [-s] ...这通常是一个驱动程序名,后面跟着一个单元号,例如用于第一个以太
net-tools arp源码 ifconfig源码 route源码
使用 ifconfig -a 就可以得到所有网络界面的 IP 地址,但是这些 IP 地址都混在其他信息之中。 你需要从中分离出来,下面的脚本就可以帮助你直接输出 IP 地址:
Win10 Ubuntu18.04 环境下ifconfig服务没有安装,出现类似 Commend ‘xxxxxx’ not found,but can be installed with…… 错误 ~$ ifconfig 一些解决方法(我通过方法四问题得以解决) 方法一: ~$ sudo apt ...
有些同学在使用虚拟机时 ifconfig 不显示ip 地址,或者每次开机ubuntu的IP 都在变化,如何解决呢?
节点-ifconfig-解析器 ifconfig文本解析器 安装 $ npm install ifconfig-parser 原料药 .parse(src) :解析源 执照 麻省理工学院
我使用创建了一个launchd可以使用的属性列表,如果您没有或使用Lingon,请在此处复制。 <? xml version = " 1.0 " encoding = " UTF-8 " ?> <! DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" ...
Linux找不到ifconfig命令,实现ifconfig的配置文件.
my ifconfig可以用来修改IP地址等信息,也可以获取网卡参数,由C语言实现,可以在不同平台使用,适合嵌入式移植开发,或者作为网络小工具来使用。
VxWorks 6.9下的ifconfig网络配置命令
Linux 基础 45-远程管理命令-04-ifconfig查询网卡信息.flv
Linux中运行ifconfig出现错误解决方法[摘要]linux中运行ifconfig出现错误:正常情况下,只需要在控制面板上输入sudoapTInstallnet-tools就可以正常ifconfig了。不能sudoapTInstallnet-tools,出现这种问题时,解决...
ifconfig 用法详解.txt
Linux 基础 44-远程管理命令-03-ifconfig和ping作用的介绍.flv