正在检查C+中打开的UDP端口+; 如何检查一个远程的UDP端口是否使用了本机C++打开?由于UDP连接较少,因此调用connect()没有帮助。我无法尝试绑定它,因为它不是本地的nmap也不能指示。(不过,netstat可以找到,但我认为它可以查看有关打开的端口/文件的内部信息)。有没有办法检测到它?如果我在网络层上下行一层,是否可以通过C++发送ICMP消息来检查端口不可到达的状态?我是说,这能提供足够的港口状况信息吗

正在检查C+中打开的UDP端口+; 如何检查一个远程的UDP端口是否使用了本机C++打开?由于UDP连接较少,因此调用connect()没有帮助。我无法尝试绑定它,因为它不是本地的nmap也不能指示。(不过,netstat可以找到,但我认为它可以查看有关打开的端口/文件的内部信息)。有没有办法检测到它?如果我在网络层上下行一层,是否可以通过C++发送ICMP消息来检查端口不可到达的状态?我是说,这能提供足够的港口状况信息吗,c++,network-programming,udp,port,port-scanning,C++,Network Programming,Udp,Port,Port Scanning,平台是Linux。没有防弹的方法来检查远程端口是否准备好接收UDP数据报。由于UDP是无连接的,所以您只需知道远程主机是否在回答对您有意义的问题。可能有一些方法可以获得提示(就像端口扫描程序一样),但这在生产代码中是不可靠的。我假设您正在尝试确定远程计算机上的UDP端口是否正在通过防火墙和/或是否有应用程序在其上运行 您无法可靠地确定这一点。最接近的方法是尝试向该地址和端口发送一系列小数据报,间隔约1秒,持续约10秒 如果没有防火墙阻止端口,并且没有应用程序正在运行,则远程系统可能会发回ICMP

平台是Linux。

没有防弹的方法来检查远程端口是否准备好接收UDP数据报。由于UDP是无连接的,所以您只需知道远程主机是否在回答对您有意义的问题。可能有一些方法可以获得提示(就像端口扫描程序一样),但这在生产代码中是不可靠的。

我假设您正在尝试确定远程计算机上的UDP端口是否正在通过防火墙和/或是否有应用程序在其上运行

您无法可靠地确定这一点。最接近的方法是尝试向该地址和端口发送一系列小数据报,间隔约1秒,持续约10秒

如果没有防火墙阻止端口,并且没有应用程序正在运行,则远程系统可能会发回
ICMP\u UNREACH\u端口
(端口不可访问)。如果没有阻止防火墙且远程系统关闭,路由器可能会发回
ICMP\u UNREACH\u主机
ICMP\u UNREACH\u网络
。如果防火墙阻止您,它可能会发回
ICMP\u UNREACH\u FILTER\u PROHIB
,但大多数防火墙不会发回任何东西

因为大多数防火墙都会阻止这种ICMP反馈,所以收回这些信息的可能性非常小。即使ICMP消息返回,linux通常也不会让您看到它,除非您以root用户身份运行。某些操作系统会将ICMP错误报告为下一次
sendto()
发送到同一地址/端口失败,这就是为什么您需要多次重复该消息的原因。但有些没有,在这种情况下,您必须打开特定的ICMP端口并解析任何返回消息

即使您确实以某种方式收到ICMP消息,也要明白它们是不可靠的。例如,即使应用程序不仅在侦听,而且在主动向您发送数据,您也可以获得
ICMP\u UNREACH\u端口。(这很少见,但我见过这种情况发生。)

如果某个应用程序正在给定端口上运行,并且您知道该应用程序是什么,并且知道如何编写一条消息,使该应用程序响应您,那么这样做并获得响应就是端口已打开的最佳指示。但是没有响应意味着什么也没有:可能端口被阻塞,可能应用程序没有运行,或者它只是不喜欢你的消息


一句话:不,不是真的。

什么操作系统/平台上的“原生C++”?这里的问题不在于语言,而在于代码执行时的权限级别。例如,你可以,就像<代码> nMAP,从C++代码中使用 LBPCAP</代码>库。此外,我认为如果您尝试
nmap
的所有选项,您至少会得到一个关于端口是否可能已打开或已过滤的指示,即使不是在所有情况下都100%确定。您在哪里使用的
netstat
nmap
有哪些选项?netstat-lptun表示端口1060处有一个UDP端口打开,但似乎我忘记了-sU代表nmap。它需要root访问权限才能找到(并且正确地找到)、为什么?(关于
nmap
)它的级别足够低。它基本上使用某些启发式方法来分类观察到的行为是否意味着端口打开。但因为这是如此低级,它需要超级用户权限。@STATUS\u ACCESS\u DENIED这些都与远程端口无关。