【问题标题】:Access and manage native Eth0 without socket无需套接字即可访问和管理本机 Eth0
【发布时间】:2012-04-02 22:51:54
【问题描述】:

你知道在c interface eth0不用socket的情况下访问和管理的方式吗???

【问题讨论】:

    标签: c networking


    【解决方案1】:

    您为什么不按照在您的 C 代码中的 shell 上调用 ifconfig 命令的方式做一些事情:

    system("ifconfig eth0 ...");
    

    这将消除对文件描述符的需要,但允许您使用命令管理设备。执行 ma​​n 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...

    【讨论】:

    • 同意...但我不明白在这里使用文件描述符的反感...无论如何,第一个 sn-p 代码(无套接字实现)可能就是他需要做的所有事情。
    • 同意,OP 似乎不想分享足够的信息来真正回答这个问题......
    • 我想创建一个网关,以允许与 6lowpan 网络和蓝牙网络进行交互。对于这个项目,我必须访问 eth0 到较低级别。我知道原始套接字的解决方案,但我问另一个解决方案是否存在。请原谅我的混乱信息!
    【解决方案2】:

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

    【讨论】:

    • 好的,但在 ioctl 我发送文件描述符。如果没有套接字,我应该使用哪个 fd?
    • @user1307697 您意识到没有人可以回答您,除非您至少告诉我们您使用的是什么操作系统,对吧?尝试 /dev/eth0,开始。
    • 请原谅我的混淆信息,但我是 linux 编程的新用户 :) 但是谢谢 :)
    • 另一个问题,在 /dev/ 我没有 eth0...它在哪里?
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2022-10-07
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多