我使用 Scapy 用 Python 制作了一个简单的端口扫描器。
我设置了 Metasploitable 并打开了多个端口,例如。 21、22、23 和 8009。
然后我启动对这些端口的端口扫描,Scapy 确实告诉我它们是开放的。
但是,如果我扫描 Metasploitable 上未打开的端口,我会得到 TCP 标志 20,即 URG TCP 标志。这是从 URG 标志的描述中取出的。
URG标志用于通知接收站某些数据 在一个细分市场内是紧急的,应该优先考虑。如果 URG 标志 设置后,接收站评估紧急指针,一个 16 位 TCP 报头中的字段。该指针指示有多少数据 在该段中,从第一个字节开始计算,是紧急的。
紧急数据对我来说并没有真正敲响警钟。
我不明白为什么我会得到 URG 标志,我正在寻求理解为什么我得到它,即使端口关闭它意味着什么,以及如果端口已开放。
URG
标志用于在 TCP 连接的第二个通道上发送数据。除非您也发送数据,否则设置它是没有意义的。数据将保存在接收端的单独缓冲区中,程序收到信号表示有可用的紧急数据,并使用特殊标志读取
recv
系统调用。编辑:关于将其保存在单独的缓冲区中的部分仅部分正确;由于规范的原因,很难判断紧急数据从哪里开始。 强烈建议不要使用URG标志,或者至少使用SO_OOBINLINE
套接字选项将数据保留在主缓冲区中。
您确定没读错吗?通常在关闭端口上设置的标志是
RST
。
历史记录:URG
标志也是导致 Windows 95 和 NT 使用 WinNuke 崩溃的原因。