1

我发现了一篇关于在机器上获取活动 tcp/udp 连接的文章。

http://www.codeproject.com/KB/IP/iphlpapi.aspx

然而,我的问题是我需要能够远程确定活动连接 - 以查看特定端口是否正在运行或正在侦听而不篡改机器。

这可能吗?

看起来不像本机,否则可能会造成安全问题。另一种方法是查询远程服务,然后可以在本地机器上进行必要的调用。

有什么想法吗?

4

3 回答 3

4

Nmap是您正在寻找的。

于 2008-09-24T00:03:24.243 回答
3

如果远程计算机不知道,就无法知道哪些端口是打开的。但是您可以在端口上运行的程序不知道的情况下确定信息(即不干扰程序)。

使用 SYN 扫描:

为了建立连接,TCP 使用三次握手。这可以被利用来在程序不知道的情况下找出端口是否打开。

握手工作如下:

  1. 客户端通过向服务器发送 SYN 来执行主动打开。
  2. 服务器回复一个 SYN-ACK。
  3. 通常,客户端将 ACK 发送回服务器。但是这一步被跳过了。

SYN 扫描是最流行的 TCP 扫描形式。端口扫描器不使用操作系统的网络功能,而是自己生成原始 IP 数据包,并监控响应。这种扫描类型也称为“半开扫描”,因为它实际上从未打开完整的 TCP 连接。端口扫描器生成一个 SYN 数据包。如果目标端口是开放的,它将以 SYN-ACK 数据包响应。扫描仪主机以 RST 数据包响应,在握手完成之前关闭连接。

使用原始网络有几个优点,使扫描仪可以完全控制发送的数据包和响应超时,并允许详细报告响应。关于哪种扫描对目标主机的侵入性较小存在争议。SYN 扫描的优点是单个服务永远不会真正接收到连接,而某些服务可能会因连接扫描而崩溃。但是,握手期间的 RST 可能会导致某些网络堆栈出现问题,尤其是打印机等简单设备。无论哪种方式,都没有确凿的论据。

来源维基百科

如下所述,我认为nmap可以做SYN扫描。

使用套接字进行 TCP 端口扫描:

确定哪些端口打开的一种方法是打开该端口的套接字。或者到一个不同的端口,它会像你提到的那样为你找到信息。

例如从命令提示符或终端:

telnet google.com 80

UDP端口扫描:

如果 UDP 数据包被发送到未打开的端口,系统将响应 ICMP 端口不可达消息。您可以使用此方法来确定端口是打开还是关闭。但是接收程序会知道。

于 2008-09-24T00:03:10.950 回答
1

neouser99 (et al) 建议使用NMAP。如果您要做的只是检测远程计算机上打开的端口,NMAP 非常好。

但是从您的问题的声音来看,您实际上是在尝试确定远程计算机上打开连接的端口。如果您想要一个通用的监控解决方案,包括连接的端口,那么您可以在您的远程计算机上安装一个 snmp 服务器。有两个MIB可让您检查端口状态,它们是TCP-MIB ::tcpConnectionTable 和UDP-MIB ::udpEndpointTable。

net-snmp中提供的守护程序(服务器)很可能已获得对这些 mib 的支持。

于 2008-09-28T05:49:29.000 回答