免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5194 | 回复: 3
打印 上一主题 下一主题

ioctl()设置IP地址时,段错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-22 13:42 |只看该作者 |倒序浏览
自己写的通过ioctl()来修改IP地址的程序,结果在运行(root)的时候报错, 不知道是memcpy(&ifr->ifr_addr,(struct sockaddr *)&addr, sizeof(addr));的问题,还是ioctl()调用的时候需要额外的参数,


  1. int set_ipaddr(int sockfd, struct ifreq *ifr, char *ifname, char *ip)
  2. {
  3.         struct sockaddr_in      addr;

  4.         bzero(&addr, sizeof(addr));
  5.         addr.sin_family = PF_INET;
  6.         addr.sin_addr.s_addr = inet_addr(ip);

  7.         printf("Interface:%s\n",ifname);
  8.         strncpy(ifr->ifr_name, ifname, IFNAMSIZ);
  9.         memcpy(&ifr->ifr_addr,(struct sockaddr *)&addr, sizeof(addr));     //运行到此报段错误

  10.         printf("IP:%s\n",ifr->ifr_ifru.ifru_addr);

  11.         if(ioctl(sockfd, SIOCSIFADDR, &ifr) < 0)
  12.                 perror("Ioctl Error"), exit(1);

  13.         return 0;
  14. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2008-01-22 14:22 |只看该作者
ifr在函数外部有分配空间不?

论坛徽章:
0
3 [报告]
发表于 2008-01-22 15:17 |只看该作者
哦!  我只是在main()里定义了: struct  ifreq   ifr  并没有分配空间.

现在把ifr 定义在了set_ipaddr() 中编译,运行通过了.不过出现了另外一个问题:

#./ipconf  eth0 10.78.28.2118之后,它把我的子网掩码也改了(貌似所有参数都改了)不能看网页了.
用root重新还原网卡配置:
#ifconfig eth0 up 10.78.28.106 netmask 255.255.255.0之后,只能ping通网关,不能看网页,估计是DNS也改了.

PS:我的主机是DHCP动态分配的.是不是因为使用ipconf后把他改成静态的了,其他信息丢失?那为什么用ifconfig可以自己分配IP呢?

改后的代码:

  1. int set_ipaddr(int sockfd, char *ifname, char *ip)
  2. {
  3.         struct  sockaddr_in     addr;
  4.         struct  ifreq           ifr;

  5.         bzero(&addr, sizeof(addr));
  6.         addr.sin_family = PF_INET;
  7.         inet_aton(ip,&addr.sin_addr);


  8.         printf("Interface:%s\n",ifname);
  9.         strncpy(ifr.ifr_name, ifname, IFNAMSIZ);

  10.         memcpy(&ifr.ifr_addr,(struct sockaddr *)&addr, sizeof(addr));

  11.         if(ioctl(sockfd, SIOCSIFADDR, &ifr) == -1)
  12.                 perror("Ioctl Error"), exit(1);

  13.         return 0;
  14. }
复制代码

[ 本帖最后由 dglwx 于 2008-1-22 15:19 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-01-22 15:59 |只看该作者
原来在PC上使用系统的ifconfig也改变其它参数.不是程序的问题(?).
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP