捕获的IP数据包的相同源和目标地址

时间:2016-04-06 19:09:46

标签: c network-programming

我有一个用户空间程序,我在其中处理数据包。我在iptables的帮助下发送给他们。

但是我有一个问题是要正确获取数据包的源和目标。目的地应为 192.168.1.66 ,来源 192.168.0.102 。但奇怪的是,如果我写:

char *dstIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_dst);    
char *srcIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_src);

我同时获得目的地和来源 192.168.1.66 但如果我写:

char *srcIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_src);
char *dstIpAddress = inet_ntoa(((struct ip*)full_packet)->ip_dst);    

我同时获得了目标和来源 192.168.0.102

问题出在哪里?

1 个答案:

答案 0 :(得分:0)

正如Obvlious船长评论的那样,inet_ntoa返回一个静态分配的缓冲区。来自inet_ntoa(3)

  

inet_ntoa()函数将以网络字节顺序给出的Internet主机地址转换为IPv4点分十进制表示法中的字符串。该字符串在静态分配的缓冲区中返回,后续调用将覆盖该缓冲区。

复制返回的值或使用inet_ntop,它使用用户分配的缓冲区。