如何在C中检查网络设备状态?

2023-12-07

我想检查网络设备状态,例如混杂模式。基本上就像所示ip a命令。

也许有人可以把我推向正确的方向?

我想在 Linux 的 C 语言中执行此操作,以便可以使用 Linux 特定的头文件。


您需要使用SIOCGIFFLAGSioctl 检索与接口关联的标志。然后您可以检查是否IFF_PROMISC标志已设置:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>     
#include <sys/ioctl.h>  /* ioctl()  */
#include <sys/socket.h> /* socket() */
#include <arpa/inet.h>  
#include <unistd.h>     /* close()  */
#include <linux/if.h>   /* struct ifreq */

int main(int argc, char* argv[])
{
    /* this socket doesn't really matter, we just need a descriptor 
     * to perform the ioctl on */
    int fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);

    struct ifreq ethreq;

    memset(&ethreq, 0, sizeof(ethreq));

    /* set the name of the interface we wish to check */
    strncpy(ethreq.ifr_name, "eth0", IFNAMSIZ);
    /* grab flags associated with this interface */
    ioctl(fd, SIOCGIFFLAGS, &ethreq);
    if (ethreq.ifr_flags & IFF_PROMISC) {
        printf("%s is in promiscuous mode\n",
               ethreq.ifr_name);
    } else {
        printf("%s is NOT in promiscuous mode\n",
               ethreq.ifr_name);
    }

    close(fd);

    return 0;
}

如果你想set混杂模式的接口,您将需要 root 权限,但您可以简单地设置该字段ifr_flags并使用SIOCSIFFLAGS ioctl:

/* ... */
ethreq.ifr_flags |= IFF_PROMISC;
ioctl(fd, SIOCSIFFLAGS, &ethreq);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在C中检查网络设备状态? 的相关文章

随机推荐

  • 正则表达式匹配括号之间的内容

    我很难让它发挥作用 我有一个像这样的字符串 something 0 9 a z 我需要正则表达式或一种获取括号之间的每个匹配项并返回匹配数组的方法 例如 0 9 a z 我使用的正则表达式是 这似乎确实匹配正确的事情if只有one一组括号
  • 如何在使用 for-each 循环迭代时修改 Collection 而不会出现 ConcurrentModificationException? [复制]

    这个问题在这里已经有答案了 如果我在使用 for each 循环迭代集合时修改集合 它会给出ConcurrentModificationException 有什么解决方法吗 Use Iterator remove 这是在迭代期间修改集合的唯
  • 使用 mongodump 提取流星数据

    我会先说 除了一些 mongo 教程之外 我几乎没有编码知识 所以这可能是一个非常简单的答案 我正在尝试将流星项目中的数据提取到可以编辑的文本文件中 以前我刚刚安装了meteor 和Node js 但我安装了MongoDB 因为没有它我的c
  • 子类会继承私有字段吗?

    这是一道面试题 子类是否继承private 领域 我回答 否 因为我们无法使用 正常的 OOP 方式 访问它们 但面试官认为它们是继承的 因为我们可以间接或使用反射访问这些字段 并且它们仍然存在于对象中 回来后发现下面的一句话javadoc
  • 使用 JDBC 的小程序 - java.security.AccessControlException:访问被拒绝

    JDBC using Applet import javax swing JApplet JLabel JButton import java applet Applet import java awt Layout import java
  • 如何在C中使用scanf获取数组中的整数输入?

    我使用 scanf 获取多个整数输入并将其保存在数组中 while scanf d array i 1 输入整数由空格分隔 例如 12 345 132 123 我在另一篇文章中读到了这个解决方案 但问题是 while 循环没有终止 这个说法
  • 相同的 WSAPI v2.0 安全密钥可在 REST 客户端中使用,但与 curl 一起使用时会产生无效密钥错误

    在浏览器的 REST 客户端中 当我发布到此 URL 时 https rally1 rallydev com slm webservice v2 0 HierarchicalRequirement create key 123abc 使用此
  • C中的链表排序

    我正在为我的一个类编写一个简单的文件 这是一个简单的链接列表活动 我需要对链接列表进行排序 到目前为止 这是我的源代码 Simple list manipulation exercise 1 Create a list of integer
  • gdb - 使用管道进行调试

    假设我有两个名为blah and ret 我想调试blah接收输入的程序ret通过 I O 重定向进行编程 我该如何调试blah在以下情况下使用 gdb 进行编程 bash gt ret blah 首先 您可以运行程序并通过pid进行调试
  • 计算两个日期之间的差异

    我在txt文件中的日期是这样的 开始日期 011589 结束日期是 122390 如何使用 R 计算持续时间 我试过 mydata startdate as Date mydata startdate 但没用 这可以使用以下方法完成form
  • 将 CSV 附件导入 Google 表格

    我想做的是将 CSV 附件的内容输出到 Google Sheets 上 不知道我这样做是否正确 但我在网上找到了这个 运行了它 然后什么也没有发生 function importCSVFromGmail var threads GmailA
  • Matplotlib 散点图 - 删除白色填充

    我正在使用 matplotlib 在纬度经度坐标中绘制变量 问题是该图像不能包含轴或边框 我已经能够删除轴 但图像周围的白色填充必须完全删除 请参阅下面代码中的示例图像 https i stack imgur com nHCPF jpg 我
  • 如何使用MySQL DECIMAL?

    我不太了解 MySQL 的 DECIMAL 我需要该行能够包含 00 0001 到 99 9999 之间的任何数字 我将如何构建它以像这样工作 双列是not与 DECIMAL 列相同 并且您会遇到麻烦如果您对财务数据使用双列 DOUBLE
  • 为什么 AnsiSameText 不是 ANSI?

    从名字上看 人们会相信 SysUtils Delphi XE 中定义的 AnsiSameText 将接收 ANSI 字符串作为参数 但该函数的定义如下 function AnsiSameText const S1 S2 string Boo
  • 上传前验证文件大小

    我需要验证要上传到服务器的文件 上传之前必须进行验证 即在客户端完成验证 此任务应在 ASP NET MVC3 网页中完成 它还应该适用于所有浏览器 IE9 8 7 FF Chrome 我发现 IE 没有 FileReader API 我的
  • 无法在 Solr 中使用 ICUTokenizerFactory

    我正在尝试在 Solr 模式中使用 ICUTokenizerFactory 这就是我的定义field and fieldType
  • jQuery 拖动/使用 CSS 变换比例调整大小

    我正在应用 CSS 转换 以及浏览器特定的 webkit o 等 变换 矩阵 0 5 0 0 0 5 0 0 到一个 div 然后在该 div 的子级上使用 jQuery 的draggable 和 ressized 插件 我遇到的问题是 当
  • OnActionExecuting 在标准 asp.NET 中等效吗?

    是否有 MVC NET 的等效项OnActionExecuting在标准 asp net 中 我以为会是Page Load since OnActionExecuting每次执行操作 或加载页面 时都会调用 但当我尝试使用 Page Loa
  • 活动和片段有什么区别?

    根据我的研究 backstack 的概念及其存在方式存在显着差异 Activity When an activity被放置到backstack of activities用户 只需按一下即可导航回到上一个活动back button Acti
  • 如何在C中检查网络设备状态?

    我想检查网络设备状态 例如混杂模式 基本上就像所示ip a命令 也许有人可以把我推向正确的方向 我想在 Linux 的 C 语言中执行此操作 以便可以使用 Linux 特定的头文件 您需要使用SIOCGIFFLAGSioctl 检索与接口关