您是否知道在没有socket ???
的情况下在c接口eth0中访问和管理的方式答案 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 ......