c - 如何使用C在netfilter中打印特定IP地址的数据包信息?
问题描述
我正在使用此代码打印一些有关“所有”从所有 IP 地址接收和发送的数据包的数据包信息。如何只打印特定 IP 地址的数据包信息?
这是代码的一部分:
{
struct ethhdr *eth;
struct iphdr *ip_header;
eth = (struct ethhdr*)skb_mac_header(skb);
ip_header = (struct iphdr *)skb_network_header(skb);
if (HOST_IP_ADDR == ip_header->saddr)
return NF_ACCEPT;
printk("NF_IP_LOCAL_IN hook:\n");
printk("src mac %pM, dst mac %pM\n", eth->h_source, eth->h_dest);
printk("src IP addr:=%pI4\n", &ip_header->saddr);
return NF_ACCEPT;
}
解决方案
如果您将 HOST_IP_ADDR 定义为字符串,则可以in_aton()
在要匹配的 ip 地址周围使用
ip_header = (struct iphdr *)skb_network_header(skb);
if (in_aton("192.168.1.1") == ip_header->saddr)
{
// matches 192.168.1.1
}
推荐阅读
- react-native - React Native 代码未在 VS Code 中的模拟器上运行
- python - 在没有无头模式的情况下在 EC2 上运行 Selenium?
- selenium-firefoxdriver - RIDE 在运行屏幕测试时找不到 firefox geckodriver
- response - SteamedResponse 在其他服务器上的流明中不起作用
- postgresql - postgres的pgAdmin4登录问题
- python - 获取转换后逻辑回归最重要特征的名称
- mysql - 删除 Select Inner Join 查询结果
- apache-kafka - 仅在 Kafka Connect 中看到 1 个工作人员
- sequelize.js - SequelizeDatabaseError:无法打开引用的表“成员”
- google-apps-script - 通过脚本在相关下拉列表/数据验证中设置默认列表值