import sys
from scapy.all import * // 引入sys 和scapy两个模块
if len(sys.argv)!=3: // 输入的如果不是三个元素会报错,注意sys.argv函数返回的是是个列表
print("synty error")
sys.exit(1)
dst_ip=sys.argv[1] //目标ip地址
dst_port=int(sys.argv[2])//目标端口
src_port=RandShort() //自动获取一个源端口
resp=sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="S")) //构建TCP数据包,“S”是全开扫描。
if(str(type(resp)) == "<class 'NoneType'>"): //这是返回数据包无类型情况
print("The port is %s Closed"%(dst_port))
elif(resp.haslayer(TCP)): //返回数据包如果是TCP包
if(resp.getlayer(TCP).flags == 0x12): //flags==0x12代表返回的是SYN+ACK数据包
send_rst = sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags="AR")) //发送ACK+RESET数据包建立连接
print("The port is %s Open"%dst_port)
elif(resp.getlayer(TCP).flags == 0x14): //flags==0x12代表返回的是reset数据包,对方拒绝建立连接
print("The port is %s Open"%dst_port)