我发现了一篇关于在机器上获取活动 tcp/udp 连接的文章。
http://www.codeproject.com/KB/IP/iphlpapi.aspx
然而,我的问题是我需要能够远程确定活动连接 - 以查看特定端口是否正在运行或正在侦听而不篡改机器。
这可能吗?
看起来不像本机,否则可能会造成安全问题。另一种方法是查询远程服务,然后可以在本地机器上进行必要的调用。
有什么想法吗?
Nmap是您正在寻找的。
如果远程计算机不知道,就无法知道哪些端口是打开的。但是您可以在端口上运行的程序不知道的情况下确定信息(即不干扰程序)。
使用 SYN 扫描:
为了建立连接,TCP 使用三次握手。这可以被利用来在程序不知道的情况下找出端口是否打开。
握手工作如下:
SYN 扫描是最流行的 TCP 扫描形式。端口扫描器不使用操作系统的网络功能,而是自己生成原始 IP 数据包,并监控响应。这种扫描类型也称为“半开扫描”,因为它实际上从未打开完整的 TCP 连接。端口扫描器生成一个 SYN 数据包。如果目标端口是开放的,它将以 SYN-ACK 数据包响应。扫描仪主机以 RST 数据包响应,在握手完成之前关闭连接。
使用原始网络有几个优点,使扫描仪可以完全控制发送的数据包和响应超时,并允许详细报告响应。关于哪种扫描对目标主机的侵入性较小存在争议。SYN 扫描的优点是单个服务永远不会真正接收到连接,而某些服务可能会因连接扫描而崩溃。但是,握手期间的 RST 可能会导致某些网络堆栈出现问题,尤其是打印机等简单设备。无论哪种方式,都没有确凿的论据。
如下所述,我认为nmap可以做SYN扫描。
使用套接字进行 TCP 端口扫描:
确定哪些端口打开的一种方法是打开该端口的套接字。或者到一个不同的端口,它会像你提到的那样为你找到信息。
例如从命令提示符或终端:
telnet google.com 80
UDP端口扫描:
如果 UDP 数据包被发送到未打开的端口,系统将响应 ICMP 端口不可达消息。您可以使用此方法来确定端口是打开还是关闭。但是接收程序会知道。