|
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了,
但是老大不让..(需要重编内核,已验证过) |
|