提问人:Jonathan 提问时间:4/9/2019 更新时间:4/10/2019 访问量:2160
如何从活动的udp连接中获取远程IP地址和端口?
How to get remote ip address and port from active udp connection?
问:
我正在开发一个图形化 Windows 应用程序。因此,首选 c++ 和 c# 解决方案。
对于我的应用程序,我需要从特定进程的活动 udp 连接中获取远程地址和端口。
我尝试了 API,但 UDP 的方法没有给出远程地址和端口。IP Helper
我已经看到这些帖子获取活动 udp 连接的目标 IP/端口?和使用 IP Helper 在 Windows 中获取活动 UDP 连接的远程地址。
我理解为什么 IP Helper 无法完成这项工作(udp 是无连接的,需要捕获数据包),但我没有发现具体如何做到这一点。
您是否有现成的解决方案或接近它的解决方案?
答:
1赞
Remy Lebeau
4/10/2019
#1
正如您已经发现的那样,UDP 是无连接的,因此操作系统不会像 TCP 那样跟踪远程参与方信息。与 TCP 套接字不同,UDP 套接字可以同时与多个远程方通信,其中指定目标 IP/端口,并报告发送方的 IP/端口。sendto()
recvfrom()
我理解为什么 IP Helper 无法完成这项工作(udp 是无连接的,需要捕获数据包),但我没有发现具体如何做到这一点。
您需要使用数据包捕获库(例如 libpcap),并手动跟踪您看到的传出数据包的 ips/端口。
评论
0赞
capveg
9/1/2023
这个回答并不完全正确。如果应用程序为 UDP 套接字调用 connect(),则 OS 会跟踪连接。这在实践中会发生:''' netstat -ap udp |grep -v '*:*' 活动连接 原始本地地址 外部地址状态 UDP 0.0.0.0:49775 0.0.0.95:443 UDP 0.0.0.0:50146 0.0.32.3:443 UDP 0.0.0.0:56207 0.0.0.101:443 UDP 0.0.0.0:58457 0.0.0.95:443 UDP 0.0.0.0:59344 0.0.0.95:443 UDP 0.0.0.0:61905 0.0.0.2:443 ''' 我们如何获取此信息?
0赞
Remy Lebeau
9/1/2023
@capveg是的,您可以使用(即启用该套接字的使用)将对等 IP/端口静态分配给 UDP 套接字,并且您可以使用从“ed UDP 套接字”中检索对等 IP/端口,但 AFAIK 没有 API 允许您从操作系统的路由表外部获取相同的对等信息, 因为对于 UDP,它们只报告本地绑定的 IP/端口,而不报告对等 IP/端口。connect()
send()
recv()
getpeername()
connect
0赞
capveg
9/3/2023
有关详细信息,请参阅 stackoverflow.com/questions/77029015/...,但“netstat -a p udp”输出远程 IP 的值 + UDP 端口...我只是想了解它们来自哪里(以及为什么它们有问题)。
评论