无插槽即可访问和管理本机Eth0

时间:2012-04-02 09:43:36

标签: c networking

您是否知道在没有socket ???

的情况下在c接口eth0中访问和管理的方式

2 个答案:

答案 0 :(得分:0)

是的,您可以通过相应的ioctl电话直接与网络接口驱动程序通话。有关详细信息,请参阅驱动程序API参考。某些操作系统也可以通过自己的API提供访问权限,例如参见this question

答案 1 :(得分:0)

为什么不在C代码中对shell调用 ifconfig 命令执行某些操作:

system("ifconfig eth0 ...");

这将消除对文件描述符的需要,但允许您使用该命令管理设备。执行 man ifconfig ,了解如何构建 ifconfig 请求以管理您需要对界面执行的任何操作。

如果您需要更低级别,那么您可以简单地打开一个原始套接字...分配您想要操作的以太网设备的索引...然后使用 ioctl()< / strong>根据需要配置:

if ((fd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) {
  perror("socket");
}

struct ifreq req;
strncpy(req.ifr_name, "eth0", IFNAMSIZ-1);
if (ioctl(fd, SIOCGIFINDEX, &ifreq) < 0)
  perror("SIOCGIFINDEX");

然后你掌握 eth0 ......