
一、实验目的掌握端口状态探测的基本原理熟悉使用 Scapy 构造和分析网络数据包理解不同端口扫描技术的工作原理、特点与局限对比自研扫描器与 Nmap 的扫描结果。二、实验环境与拓扑扫描主机AttackerKali Rolling 2025.2内网 IP172.16.111.129目标主机VictimKali Rolling 2025.2内网 IP172.16.111.123网关GatewayDebian Buster内网 IP172.16.111.1网络拓扑------------------ | | | 网关(Gateway) | | Debian Buster | | IP: 172.16.111.1| | | ----------------- | -------------------------------- | | ------------------- ----------------------- | | | | | 扫描主机(Attacker) | | 目标主机(Victim) | | Kali Rolling | | Kali Rolling | | 内网IP: 172.16.111.129 | | 内网IP: 172.16.111.123 | | Host-Only: 192.168.138.6| | Host-Only: 192.168.138.8| | | | | ------------------------- -------------------------三、端口状态模拟在目标主机上模拟三种端口状态状态模拟方式端口开放启动 SSH、DNS 服务22/tcp、53/udp关闭无服务监听12345过滤iptables 丢弃8080操作示例# 开放端口sudosystemctl startsshsudosystemctl start dnsmasq# 关闭端口确保 12345 无服务sudonetstat-tlnp|grep-E12345# 过滤端口防火墙拦截 8080sudoiptables-AINPUT-ptcp--dport8080-jDROPsudoiptables-AINPUT-pudp--dport8080-jDROP验证sudonmap-sS-p22,53,12345,8080 localhostsudonmap-sU-p22,53,12345,8080 localhost用 telnet 测试telnet 172.16.111.123 22连接成功看到 SSH 标语telnet 172.16.111.123 12345连接被拒绝telnet 172.16.111.123 8080连接超时。说明端口状态模拟成功。四、连通性测试在扫描主机、目标主机、网关上分别执行 pingping172.16.111.123ping172.16.111.1五、各扫描技术原理与测试结果所有扫描均使用自研 Python 脚本调用 Scapy 实现并用 tcpdump 抓包验证。1. TCP Connect 扫描原理调用操作系统的connect()完成完整三次握手。开放SYN → SYN-ACK → ACK连接建立后 RST 断开关闭SYN → RST-ACK过滤SYN → 无响应。测试sudotcpdump-ieth0-n-wtcp_connect_scan.pcapsudopython3 tcp_connect.py172.16.111.123-p22,12345,8080结果端口状态程序结果抓包分析是否符合原理开放开放SYN → SYN-ACK → ACK符合关闭关闭SYN → RST-ACK符合过滤过滤SYN → 无响应符合2. TCP Stealth ScanSYN 半开放扫描原理发送 SYN收到 SYN-ACK 后直接发 RST不完成三次握手。开放SYN → SYN-ACK → RST关闭SYN → RST-ACK过滤SYN → 无响应。测试sudotcpdump-ieth0-n-wtcp_stealth_scan.pcapsudopython3 tcp_stealth.py172.16.111.123-p22,12345,8080结果与 TCP Connect 类似但更隐蔽不会在应用层留下完整连接记录。3. TCP Xmas 扫描原理发送 FIN、URG、PSH 标志位置 1 的异常包。关闭返回 RST开放或过滤通常无响应无法区分。测试sudotcpdump-ieth0-n-wtcp_Xmas_scan.pcapsudopython3 tcp_Xmas.py172.16.111.123-p22,12345,8080结果端口状态程序结果抓包分析是否符合原理开放开放/过滤FIN-PSH-URG → 无响应符合关闭关闭FIN-PSH-URG → RST-ACK符合过滤开放/过滤FIN-PSH-URG → 无响应符合4. TCP FIN 扫描原理只设置 FIN 标志位。关闭返回 RST开放或过滤通常无响应。测试sudotcpdump-ieth0-n-wtcp_fin_scan.pcapsudopython3 tcp_fin.py172.16.111.123-p22,12345,8080结果与 Xmas 扫描类似无法区分开放与过滤。5. TCP NULL 扫描原理所有 TCP 标志位清零。关闭返回 RST-ACK开放或过滤通常无响应。测试sudotcpdump-ieth0-n-wtcp_null_scan.pcapsudopython3 tcp_null.py172.16.111.123-p22,12345,8080结果同样无法区分开放与过滤。6. UDP 扫描原理发送空 UDP 包。关闭返回 ICMP 端口不可达开放通常无响应除非应用层有响应过滤无响应。测试sudotcpdump-ieth0-n-wudp_scan.pcapsudopython3 udp_scan.py172.16.111.123-p22,53,12345,8080结果端口状态程序结果抓包分析是否符合原理开放开放/过滤UDP 包符合关闭关闭UDP → ICMP 端口不可达符合过滤开放/过滤UDP 包符合六、与 Nmap 对比使用 Nmap 对同一目标执行相同扫描sudonmap-sT-p22,80,12345,8080172.16.111.123sudonmap-sS-p22,12345,8080172.16.111.123sudonmap-sX-p22,12345,8080172.16.111.123sudonmap-sF-p22,12345,8080172.16.111.123sudonmap-sN-p22,12345,8080172.16.111.123sudonmap-sU-p22,53,12345,8080172.16.111.123Nmap 结果与自研扫描器基本一致22/tcp开放12345/tcp关闭8080/tcp过滤53/udp开放