首页 > 解决方案 > 如何使用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;
}

标签: chooknetfilter

解决方案


如果您将 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
}

推荐阅读