随笔-15  评论-10  文章-1  trackbacks-0
有个需求需要在内核态下修改本机的IP地址,经过分析后我个人觉得不可行(不修改内核的情况下)

分析思路:

1、用户态下修改IP可以通过shell命令:
   ifconfig eth0 192.168.1.xxx

2、通过kgdb跟踪上述命令后,发现走的是ioctl,即代码走到
   int devinet_ioctl(unsigned int cmd, void __user *arg)
   {

    /* 验证参数,禁止了直接从内核态下调用该ioctl */
    if (copy_from_user(&ifr, arg, sizeof(struct ifreq)))
    ...

    case SIOCSIFADDR:    /* Set interface address (and family) */
        修改ip地址
    ...
    }

 3、研究了修改ip地址的相关函数后,发现ioctl是唯一修改IP的途径。在
    内核下直接调用该ioctl,函数copy_from_user无法通过

 4、把copy_from_user改为memcpy后在内核下便可以直接调用ioctl修改IP了,
    但是老大不让..(需要重编内核,已验证过)

posted on 2007-01-27 01:23 hzb 阅读(772) 评论(1)  编辑 收藏 引用

评论:
# re: 为什么linux内核态下没有办法修改本机IP 2012-04-10 18:41 | hder
可以通过内核调用应用程序,然后再修改ip  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理