使用UDP进行扫描:
端口关闭:返回一个 ICMP port-unreachable (端口不可达)的包
端口开放:没有回包
使用scapy发送一个UDP的数据包到靶机的53305端口,端口未开放。
u=UDP()
i=IP()
r=(i/u)
r[IP].dst="192.168.174.129"
r[UDP].dport=53305
sr1(r)
再将dport改成一个开放的UDP端口(53),结果没有回包
使用nmap进行UDP端口扫描:
-sU:使用UDP协议进行扫描(nmap只扫描常用的一千个端口)
-p:指定扫描的端口号
发送TCP包进行端口扫描:参考文章(https://www.cnblogs.com/bigcat47/p/9798973.html)
- 指定端口发送SYN包,端口未开发回复RST包,开放则回SYN-ACK包。
使用scapy发送一个SYN的TCP包到靶机
i=IP()
t=TCP()
r=(i/t)
r[IP].dst=192.168.32.129
r[TCP].dport=513
#TCP的flag默认使用S值(SYN)
sr1(r)
端口开发,返回SYN,ACK的包,系统内核返回RST包。
使用nmap半链接扫描:
-sS:不加参数nmap默认使用sS方式进行扫描。(发送SYN包)
--open:只显示open状态的端口
-p:指定端口范围
-iL:指定文件扫描多个ip
hping3:
--scan:指定端口范围,进行扫描命令
-S:使用SYN进行
--spoof:伪造源地址,目标机也只会给伪造地址回包
全连接扫描:
import logging
logging getLogger("scapy,runtime").setLevel(logging,ERROR)
from scapy.all import *
SYN=IP(dst="192.168.32.129")/TCP(dport=25,flags="S")
print"--SENT--"
#发送syn包
SYN.display()
print"\n\n-- RECEIVID --"
#获取回包
response=sr1(SYN.timeout=1,verbose=0)
response.display()
if int(response(TCP).flags==18:
print"\n\n -- SENT --"
#发送ACK包
ACK=IP(dst"192.168.32.129")/TCP(dport=25,flags="A",ack=(response[TCP].seq+1)
ACK.display()
print"\n\n -- RECEVIED --"
response2=sr1(ACK,timeout=1,verbose=0)
response2.display()
else:
print"SYN+ACK not returned"
结果:
系统内核先发送RST包,然后代码块才反应过来发送ACK包。
解决办法:
iptables -A OUTPUT -p tcp --tcp-flags RST RST -d 192.168.32.129 -j DROP
然后再执行脚本,TCP三次握手就可以正常执行
使用nmap进行全连接扫描:
-sT:全连接扫描
僵尸扫描:
nmap:
检查机器能否作为僵尸机(可不加-p参数)
nmap -p8099 172.17.13.240 --script=ipidseq.nse
回复ipid是Incremental(递增的),可作为僵尸机。
使用nmap进行僵尸扫描:
-sI:指定僵尸机地址
使用僵尸机172.17.13.240的9999端口进行僵尸扫描
nmap 47.97.105.24 -sI 172.17.13.240:9999 -Pn
很幸运,真实机中存在防火墙gg