我正在使用数据包捕获库,我已经将它打印出来的数据包IP地址到控制台使用它正常工作:
printf(" From: %s\n", inet_ntoa(ip->ip_src));
printf(" To: %s\n", inet_ntoa(ip->ip_dst));
下面几行我用不同的.C
文件调用一个方法,使用它传递IP地址和端口号:
addpacket(0, inet_ntoa(ip->ip_src), inet_ntoa(ip->ip_dst), ntohs(tcp->th_dport));
方法是:void addpacket(int table, char *srcIP, char *dstIP, int port) {...}
但在addpacket
方法中,我将此打印到控制台:
printf("---------------------SRC:%s\n", srcIP);
printf("---------------------DST:%s\n", dstIP);
printf("---------------------PRT:%i\n", port);
我得到了这样的结果:
---------------------SRC:192.168.1.64
---------------------DST:192.168.1.64
---------------------PRT:60549
其中源和目标IP地址始终相同。我找不到任何混合起来的地方。如果我在原始.C
文件中将其打印到控制台,则会显示正确的IP地址,但在方法调用期间似乎混淆了一些东西。有什么想法吗?
答案 0 :(得分:5)
inet_ntoa
可以使用静态缓冲区来存储结果,这意味着inet_ntoa
的第二次调用会覆盖第一次调用的结果。请改用inet_ntop
,这样可以提供自己的缓冲区。