利用python实现端口扫描
计算机资源共享群:710714762
欢迎来白嫖,也可以扯淡摸鱼。
目录
- 利用python实现端口扫描
- 端口扫描是什么
- 扫描原理
- python实现
端口扫描是什么
一个端口的开放意味着主机开启了某一个服务,该服务可能就是一个潜在的通信通道或者入侵通道。端口扫描就是找出目标主机或设备开放的端口和服务,为下一步攻击做好准备,属于战前侦察。
扫描原理
向端口发送探测报文,之后记录并分析该端口的响应报文来判断是否开启,可分为TCP端口扫描和UDP端口扫描两大类。
扫描类型 | 包含类别 |
---|---|
TCP扫描 | 全连接扫描、半连接扫描、FIN扫描、ACK扫描、NULL扫描、XMAS扫描等等 |
UDP扫描 | 唯一的一种:UDP端口扫描 |
python实现
使用python实现TCP扫描的全连接扫描。
对socket函数不了解的可以查看该文: python套接字socket用法.
from socket import *
def connScan(tgtHost,tgtPort):
try:
connSkt=socket(AF_INET,SOCK_STREAM) #建立TCP连接
connSkt.connect((tgtHost,tgtPort)) #若无连接,则会出错,进入except
connSkt.send('ViolentPython\r\n'.encode()) #像端口发送数据
results=connSkt.recv(100) #若端口开放,记录返回的消息
print('[+]%d/tcp open' %tgtPort)
print('[+] '+str(results))
connSkt.close()
except:
print('[-]%d/tcp closed' %tgtPort)
def portScan(tgtHost,tgtPorts):
try:
tgtIP=gethostbyname(tgtHost)
except:
print('[-] Cannot resolve %s : Unknown host'%tgtHost)
return
try:
tgtName=gethostbyaddr(tgtIP)
print('\n[+] Scan Results for:'+tgtName[0])
except:
print('\n[+] Scan Results for:' + tgtIP)
setdefaulttimeout(1)
for tgtPort in tgtPorts:
print('Scanning port '+tgtPort)
connScan(tgtHost,int(tgtPort))
if __name__ == '__main__':
tgtHost='192.168.0.13' #目标主机ip
tgtPorts=['20','21','22','80'] #要扫描的端口
portScan(tgtHost,tgtPorts)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
结果如下图: