网络扫描
姓名:贾昊龙
学号:18307130049
TCP端口扫描
- Target:当被扫描端口收到
SYN
数据包的时候,返回一个SYN+ACK
数据包给源主机,同时过滤RST
数据包。 - Python:
#!/usr/bin/python
from scapy.all import *
def process(pkt):
IP_src = pkt[IP].src
IP_dst = pkt[IP].dst
TCP_sport = pkt[TCP].sport
TCP_dport = pkt[TCP].dport
TCP_seq = pkt[TCP].seq
TCP.ack = pkt[TCP].ack
#对应的源主机端口信息的获取
send_pkt = IP(src = IP_dst, dst = IP_src) / TCP(dport = TCP_sport, sport = TCP_dport, ack = TCP_seq + 1, flags = "SA")
#发送数据包
send(send_pkt)
sniff(filter = "tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0", prn = process)
#进行过滤
通过嗅探函数来进行过滤并且抓取对应的SYN
数据包,回复的SYN+ACK
数据包构造如下:从抓取到的数据包当中获取源主机的IP以及端口号,之后ACK 号为抓取包的序列号加 1 。同时需要重新设置防火墙,过滤掉系统自动返回的 RST 数据包:
iptables -F
iptables -P INPUT ACCEPt
iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
之后使用zenmap来进行扫描:
UDP端口扫描
通过过滤掉 ICMP port unreachable
数据包,来使扫描方无法判断端口是否开放。
使用防火墙来进行过滤
iptables -A OUTPUT -p icmp --icmp-type 3 -j DROP
之后还是使用zenmap来进行扫描
可以看到处于ignore state
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!