在nDPI里我想取到ip 包的saddr, 和 daddr , 我去拿的时候发现:
我用 flow->packet.iph.saddr 和 flow->packet.iph.daddr 拿到的每个包的两个地址都是一样的(应该是不一样的才对),我就不理解了。 端口号我在tcp层拿到了。
问题:
1、 问什么拿到的地址是一样的?
2、 怎么才能拿到正确的不同的地址?
这是内核打出的log:
[ 6455.916587] [NDPI] src_ipv4: 183.232.103.143, src_port: 43965, dst_ipv4: 183.232.103.143, dst_port: 80,
这是log相关的代码:
typedef struct element7
{
ndpi_ip_addr_t src_ipv4;
u_int16_t src_port;
ndpi_ip_addr_t dst_ipv4;
u_int16_t dst_port;
u_int8_t* key;
u_int32_t packets_count;
u_int64_t flows_count;
} element7;
struct element7 ele;
struct element7 ele_reverse;
memset(&ele, 0, sizeof(element7));
ndpi_packet_src_ip_get(packet, &ele.src_ipv4);
ele.src_port = ntohs(packet->tcp->source);
ndpi_packet_dst_ip_get(packet, &ele.dst_ipv4);
ele.dst_port = ntohs(packet->tcp->dest);
printf("[NDPI] src_ipv4: %s, src_port: %u, dst_ipv4: %s, dst_port: %u, \n",
ndpi_get_ip_string(ndpi_struct, &ele.src_ipv4), ele.src_port,
ndpi_get_ip_string(ndpi_struct, &ele.dst_ipv4), ele.dst_port);