某个名为Jitsi的应用程序(在Java上运行)表现出一种以前没有遇到过的奇怪行为: 处理NFQUEUE数据包的监控程序清楚地显示UDP数据包正在发送, 但当我调查: “/ proc / net / udp”和“/ proc / net / udp6”它们是空的,而且“/ proc / net / protocols”有一个UDP的“套接字”列,它是0。 但UDP数据包不断发送。 然后大约一分钟后,“/ proc / net / udp”和“/ proc / net / protocols”开始显示有关UDP数据包的正确信息。 并且在一段时间之后,在发送UDP数据包时,它们中没有信息。
我唯一的结论是,某种程度上应用程序可以在不创建套接字的情况下发送UDP数据包和/或可能创建套接字,然后删除它(以便内核认为没有)并且仍然使用一些模糊在外面发送数据包的方法。
请问有关此类行为的人是否有所帮助,请?
答案 0 :(得分:4)
两个想法:
尝试通过strace运行应用程序并查看该输出。
您还可以尝试使用带有套接字操作过滤器的systemtap运行它。 从那个链接:
probe kernel.function("*@net/socket.c").call {
printf ("%s -> %s\n", thread_indent(1), probefunc())
}
probe kernel.function("*@net/socket.c").return {
printf ("%s <- %s\n", thread_indent(-1), probefunc())
}
答案 1 :(得分:0)
谢谢Paul Rubel给我一个正确方向的暗示。 strace表明Java应用程序正在使用IPv6套接字。我仔细看了一下/ proc / net / udp6那里有那些插座。我可能在第一次看到过于粗略的观点,主要是因为我甚至没想到会在那里找到它们。这是我第一次在IPv6套接字上偶然发现IPv4数据包。但这就是Java所做的。 欢呼声。