鉴于网络接口(inet_x),erlang中是否有一种本地方式来识别此接口上的所有侦听端口?
可以实现网络扫描功能,从端口A到B(扫描仪:扫描(IpToScan,StartPort,EndPOrt))扫描此类网络接口的IP地址,但实现这些结果的速度相当慢。
是否有更快/更本土的方式来实现这一目标?我特别感兴趣的是获得一个表明类似于shell命令的结果的列表。此结果的导入方面还在于端口指示显示它是如何监听的,例如(*)表示所有DNS / IP地址
netstat - a | grep LISTEN
tcp4 0 0 *.15672 *.* LISTEN
tcp46 0 0 *.52791 *.* LISTEN
tcp46 0 0 *.8181 *.* LISTEN
tcp46 0 0 *.http-alt *.* LISTEN
tcp46 0 0 *.sun-as-jmxrmi *.* LISTEN
tcp46 0 0 *.websm *.* LISTEN
tcp46 0 0 *.eforward *.* LISTEN
tcp46 0 0 *.9095 *.* LISTEN
tcp4 0 0 *.6379 *.* LISTEN
tcp6 0 0 localhost.55202 *.* LISTEN
此外,虽然很容易使用 os模块,但我想避免使用它。捕获netstat -a的操作系统结果很容易,但不是跨平台的。
答案 0 :(得分:0)
据我所知,netstat用于在内核网络数据结构上提供友好,可查询的界面,因此显示的所有信息都来自本地 - 从不远程 - 计算机。 nmap
,如果我将您的请求视为需要正确地从远程计算机获取信息,则会更加符合scanner:scan/3
。我对其内部细节含糊不清,但在nmap
使用ICMP时,您可以使用gen_icmp
模仿或更常用procket。
那就是说,如果你有一个天真的scanner:scan/3
实现,但发现它太慢,你是否考虑过并行运行一个或所有扫描ping?并行映射实现可能会起作用,或者您可以使用OTP和单个请求者进程/许多工作进程模型运行,其中每个工作程序执行慢速ping,并在完成时向请求者进程发送消息。