笔记整理1——python实现端口扫描器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

笔记整理1——python实现端⼝扫描器
1.编写⼀个端⼝扫描器:代码见⽂末尾
2.实现思路
(1).实现⼀个完整的TCP握⼿作为tcp端⼝是否开放的判断依据
(2).给定⼀个ip和端⼝列表进⾏判断端⼝是否开放,开放则加⼊列表中
(3).利⽤多线程实现⾼性能扫描,利⽤信号量防⽌线程冲突导致打印结果混乱
主要调⽤模块:
import optparse
from socket import *
from threading import *
socket模块常⽤于TCP端⼝连接
threading 模块⽤于线程处理
optparse 模块⽤于解析参数选项,如:
python xxx.py <-r file> <>即为参数解析
设计了两个函数
def connport(tHost,tPort): #与端⼝建⽴连接
def scanport(tHost,tPorts): #扫描主机的端⼝列表
线程的使⽤⽅法:
for tPort in tPorts:
# print '[*] scanning Port %d'%tPort 出现了神奇的BUG
t = Thread(target=connport, args=(tHost,int(tPort)))
t.start()
2.编写⼀个调⽤Nmap⼯具的脚本:代码
主要调⽤模块
import nmap
import optparse
from threading import *
from socket import *
其中Nmap 模块并⾮是python的内置库
主要函数
def nmapScan(tHost,tPort):
def main():
3.复习思考
1.TCP端⼝扫描:
完整的TCP扫描使⽤操作系统原⽣⽹络功能不能实现底层控制,因此这种扫描⽅式并不流⾏。

并且TCP扫描很容易被发现,尤其作为端⼝清扫的⼿段:这些服务会记录发送者的IP地址
2.利⽤ip连接:result = sock.connect_ex((target_ip, port))
利⽤主机名连接:result = sock.connect((target_host, port))
主机名除了web服务器⽐较好获取,其他都难找到
python-namp包:
利⽤dns的api接⼝可以将ip进⾏反向解析。

可以导⼊dns模块
3.可以考虑尝试常⽤服务端⼝扫描后,对开放相应端⼝的主机进⾏漏洞检测(即是否符合banner),如果有,实施攻击(down机,蓝屏,等)。

#!/usr/bin/python
# coding: utf-8
import nmap
import optparse
from threading import *
from socket import *
def nmapScan(tHost,tPort):
nmscan = nmap.PortScanner()
nmscan.scan(tHost,tPort)
state = nmscan[tHost]['tcp'][int(tPort)]['state']
print '[*] '+str(tHost) + 'tcp/' +str(tPort)+' '+str(state)
def main():
parser = optparse.OptionParser('usage%prog'+' -H <target Host> -p <target Port>')# 参数解析
parser.add_option('-H',dest='Host',type='string',help='specify Host')
parser.add_option('-p',dest='Port',type='string',help='specify Port')
(options, args) = parser.parse_args() #参数和parser实例建⽴联系
tHost = gethostbyname(options.Host)
tPorts = str(options.Port).split(',')
if(tHost == None) | (tPorts == None):
print 'please input your Host and Port' exit(0)
setdefaulttimeout(1)
for tPort in tPorts:
nmapScan(tHost,tPort)
if __name__ == '__main__':
main()。

相关文档
最新文档