如何列出对 udp 套接字的所有请求?

Fli*_*int 11 networking linux udp packet-analyzer

我正在运行几个使用 udp 与大量客户端通信的服务器守护进程。我如何找到并列出与服务器通信的所有活动 udp “连接”,以便估计连接到服务器守护进程的活动客户端的数量?除了使用 tshark 或 tcpdump 嗅探数据包并查看进入服务器守护进程的 udp 数据包的源 IP 之外,我想不出一种简单的方法来做到这一点,是的,我知道 UDP 是无连接和无状态的协议。

thi*_*ice 10

UDP 是一种无状态协议 - 所以,没有状态。

要查看监听 UDP 的内容:

netstat -lnpu
Run Code Online (Sandbox Code Playgroud)

现代 linux 上的等效命令:

ss -lnpu
Run Code Online (Sandbox Code Playgroud)


Bel*_*dez 6

您可以使用 iptables 记录每个 UDP 连接:

iptables -A INPUT -p udp -j LOG --log-prefix "udp connection: "
Run Code Online (Sandbox Code Playgroud)

也许您可能希望将其限制为某些端口。在此处查看文档,或者最好查看man iptables.


Zor*_*che 5

正如其他人提到的,UDP 是无连接的,因此不会在您可能看到的标准位置中跟踪状态。

您可以使用的一种方法是简单地设置一些使用该--state选项的简单 netfilter 规则。这将强制 netfilter 跟踪与 UDP 相关的状态。设置规则后,您可以使用conntrack等工具来查看 netfilter 状态表。例如,这是我的一个系统的样子。您可以看到有几个系统经常与 udp/1194 (OpenVPN) 通信。

root@enterprise:# conntrack  -L -p udp
udp      17 173 src=192.168.32.1 dst=192.168.32.10 sport=41179 dport=1194 packets=2072 bytes=188058 src=192.168.32.10 dst=192.168.32.1 sport=1194 dport=41179 packets=2081 bytes=201185 [ASSURED] mark=0 secmark=0 use=1
udp      17 175 src=192.168.32.26 dst=192.168.32.10 sport=57440 dport=1194 packets=806767 bytes=154637738 src=192.168.32.10 dst=192.168.32.26 sport=1194 dport=57440 packets=1265893 bytes=1588040830 [ASSURED] mark=0 secmark=0 use=1
Run Code Online (Sandbox Code Playgroud)

您的 netfilter 规则可以像这样简单。

/sbin/iptables -t filter -A INPUT -m state --state NEW\,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A FORWARD -m state --state NEW\,ESTABLISHED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -m state --state NEW\,ESTABLISHED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)