【发布时间】:2012-04-02 22:51:54
【问题描述】:
你知道在c interface eth0不用socket的情况下访问和管理的方式吗???
【问题讨论】:
标签: c networking
你知道在c interface eth0不用socket的情况下访问和管理的方式吗???
【问题讨论】:
标签: c networking
您为什么不按照在您的 C 代码中的 shell 上调用 ifconfig 命令的方式做一些事情:
system("ifconfig eth0 ...");
这将消除对文件描述符的需要,但允许您使用命令管理设备。执行 man ifconfig 以了解如何构建您的 ifconfig 请求以管理您需要对界面执行的任何操作。
如果您需要比这更低的级别,那么您可以简单地打开一个原始套接字...分配您要操作的以太网设备的索引...然后使用您的 ioctl() 根据需要进行配置:
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...
【讨论】:
是的,您可以通过适当的ioctl 调用直接与网络接口驱动程序对话。有关详细信息,请参阅您的驱动程序 API 参考。某些操作系统也可能通过自己的 API 提供访问权限,例如参见 this question。
【讨论】: