Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux应用程序不使用套接字发送UDP_Linux_Sockets_Udp_Netfilter_Procfs - Fatal编程技术网

Linux应用程序不使用套接字发送UDP

Linux应用程序不使用套接字发送UDP,linux,sockets,udp,netfilter,procfs,Linux,Sockets,Udp,Netfilter,Procfs,同事们。 我正在使用libnetfilter_队列模块和iptables规则监控传出流量 ipatbles-I输出1-p all-j NFQUEUE——队列号11220 一款名为Jitsi(在Java上运行)的应用程序表现出前所未有的奇怪行为: 我处理NFQUEUE数据包的监控程序清楚地显示UDP数据包正在发送, 然而,当我研究: “/proc/net/udp”和“/proc/net/udp6”它们是空的,而且“/proc/net/protocols”有一列udp的“sockets”,它是0。

同事们。 我正在使用libnetfilter_队列模块和iptables规则监控传出流量 ipatbles-I输出1-p all-j NFQUEUE——队列号11220

一款名为Jitsi(在Java上运行)的应用程序表现出前所未有的奇怪行为: 我处理NFQUEUE数据包的监控程序清楚地显示UDP数据包正在发送, 然而,当我研究: “/proc/net/udp”和“/proc/net/udp6”它们是空的,而且“/proc/net/protocols”有一列udp的“sockets”,它是0。 但是UDP数据包不断被发送。 大约一分钟后,“/proc/net/udp”和“/proc/net/protocols”开始显示有关udp数据包的正确信息。 过了一段时间,UDP数据包被发送时,数据包中没有任何信息

我唯一的结论是,应用程序可以在不创建套接字的情况下发送UDP数据包,和/或可以创建套接字,然后删除它(以便内核认为没有),并且仍然使用一些模糊的方法在外部发送数据包

对这种行为有想法的人能帮忙吗?

两个想法:

尝试通过strace运行应用程序,并查看输出

您还可以尝试使用套接字操作的筛选器来运行它。 从该链接:

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())
}
probe kernel.function(“*@net/socket.c”).call{
printf(“%s->%s\n”,线程缩进(1),probefunc()
}
探测内核.function(“*@net/socket.c”)。返回{
printf(“%s两个想法:

尝试通过strace运行应用程序,并查看输出

您还可以尝试使用套接字操作的筛选器来运行它。 从该链接:

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())
}
probe kernel.function(“*@net/socket.c”).call{
printf(“%s->%s\n”,线程缩进(1),probefunc()
}
探测内核.function(“*@net/socket.c”)。返回{

printf(“%s谢谢Paul Rubel给了我一个正确方向的提示。strace展示了Java应用程序使用的是IPv6套接字。我仔细查看了/proc/net/udp6,这些套接字就在那里。我可能第一次看到这些套接字时太草率了,主要是因为我甚至没想到会在那里找到它们。这是我第一次偶然发现IPv4IPv6套接字上的数据包。但Java就是这么做的。
干杯。

谢谢Paul Rubel给我一个正确方向的提示。strace展示了Java应用程序正在使用IPv6套接字。我仔细查看了/proc/net/udp6,这些套接字就在那里。我可能第一次看到这些套接字时太草率了,主要是因为我甚至没想到会在那里找到它们。这是我第一次绊倒在IPv6套接字上的IPv4数据包上。但Java就是这样做的。
干杯。

Jitsi会为它发送的每个数据包打开/关闭一个套接字吗?据我所知,套接字列是进程主动保持打开状态的套接字。除非你在Jitsi发送内容时检查协议数据,否则你只能看到套接字计数为0。你是对的,它们显示为活动进程。我的应用程序CAN/proc/*10毫秒收到数据包后,我检查了时间戳。(但我找到了解决问题的方法)Jitsi是否可以为它发送的每个数据包打开/关闭套接字?据我所知,套接字列是由进程主动保持打开状态的套接字。除非在Jitsi发送某个数据时检查协议数据,否则套接字计数只能看到0。没错,它们显示为活动进程。我的应用程序扫描/proc/*在它收到数据包后10毫秒,我检查了时间戳。(但我已经找到了解决问题的方法)如果它解决了你的问题,你应该考虑接受答案。如果它解决了你的问题,你应该考虑接受答案。