inet_ntoa 的奇怪行为
我在玩 libpcap 时发现了一个奇怪的事情。
输出的一部分是: “From: src_addr, To: dst_addr”
如果我用一条语句打印,即 printf("发件人:%s,收件人:%s\n", inet_ntoa(ip_hdr->ip_src), inet_ntoa(ip_hdr->ip_dst)); 打印的 dst_addr 与打印的 src_addr 完全相同。但是,当我在这一行设置断点并使用 gdb 检查 ip_src 和 ip_dst 中存储的值时,它们是不同的。
如果写成两条语句,即 printf("来自: %s, ", inet_ntoa(ip_hdr->ip_src)); printf("收件人:%s\n", inet_ntoa(ip_hdr->ip_dst)); 然后问题就消失了,输出中的 src_addr 和 dst_addr 不同。
I was playing with libpcap and found a strange thing.
One part of the output is:
"From: src_addr, To: dst_addr"
If I print with one statement, i.e.
printf("From: %s, To: %s\n", inet_ntoa(ip_hdr->ip_src), inet_ntoa(ip_hdr->ip_dst));
The printed dst_addr is exactly the same as the printed src_addr. However, when I set a break point at this line and use gdb to examine the values stored in ip_src and ip_dst, they are different.
If written in two statements, i.e.
printf("From: %s, ", inet_ntoa(ip_hdr->ip_src));
printf("To: %s\n", inet_ntoa(ip_hdr->ip_dst));
Then the problem disappeared and the src_addr and dst_addr in the output are different.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我也遇到过同样的问题,这是因为该函数使用静态缓冲区。更多解释可以在inet_ntoa问题中找到(查看第三篇文章)。
I have faced the same and it is because the function uses a static buffer. More explanation can be found in inet_ntoa problem (look on the third post).