有个需求需要在内核态下修改本机的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 阅读(776)
评论(1) 编辑 收藏 引用