TCP端口扫描[Python3.5]
本文主要包括一下几部分:
- 1.实现扫描器用到的socket方法
- 2.实现一个简单的端口扫描
- 3.开启线程加速
- 4.命令行下的端口扫描器
1.端口扫描时用到的函数
import socket
gethostbyname()
# 传入hostname,比如www.bing.com,返回一个ipv4地址
# 传入一个ipv4地址仍返回这个地址
ipaddr = socket.gethostbyname('python.com')
print(ipaddr)
188.226.199.7
gethostbyaddr()
# 传入IPv4地址,返回包含主机名,备用主机名称列表以及主机上相同接口的IPV4地址列表的三元组。
socket.gethostbyaddr('202.165.102.205')
('UNKNOWN-202-165-102-X.yahoo.com', [], ['202.165.102.205'])
connect()
# 创建socket实例,通过connect()连接指定的ip地址和端口
# recv()方法接收返回的数据
socket.setdefaulttimeout(2)
# 创建实例,有三个可选参数
# family:[AF_INET, AF_INET6, AF_UNIX]
# type :[SOCK_STREAM, SOCK_DGRAM],TCP:SOCK_STREAM; UDP:SOCK_DGRAM
# protocol:默认0
# 采用默认参数
s = socket.socket()
s.connect(('188.226.199.7',80))
# 读取套接字中的100B数据
# ans = s.recv(100)
2.TCP端口扫描器
import socket# 连接目标主机端口
def connectScan(tgtip, port):try:skt = socket.socket(AF_INET, SOCK_STREAM)skt.connect((tgtip, port))skt.send('today is a nice day.')recv = skt.recv(100)print('%d/TCP open'%port)print(str(recv))skt.close()except:print('%d/TCP close'%port)# hostname为字符串类型,port:整形列表
def portScan(hostname, ports):try:tgtIp = socket.gethostbyname(hostname)except:print('Cannot resolve %s:Unknown host'%hostname)socket.setdefaulttimeout(2)for port in ports:print('Scanning '+tgtIp+' : '+str(port))connectScan(tgtIp, port)
portScan('iota.com', [80,21,22])
Scanning 206.188.193.56 : 80
80/TCP close
Scanning 206.188.193.56 : 21
21/TCP close
Scanning 206.188.193.56 : 22
22/TCP close
3.线程扫描
在对大量的主机和端口进行扫描时,可以引入python线程,可以同时执行多个扫描任务,只用修改portScan()循环部分同时,还要引入信号量,来控制打印输出,在打印输出前,增加一个加锁操作.如果信号量未被锁,线程获得打印输出.如果锁定,要等待信号量释放后才能打印输出.
import socket
import threading as th# 信号量
screenLock = th.Semaphore(value=1)def connectScan(tgtip, port):try:skt = socket.socket(AF_INET, SOCK_STREAM)skt.connect((hostname, port))skt.send('today is a nice day.')recv = skt.recv(100)# 加锁screenLock.acquire()print('%s : %d open'%(tgtip, port))print(str(recv))except:#加锁screenLock.acquire()print('%s : %d close'%(tgtip, port))finally:#解锁screenLock.release()# 会造成赋值之前引用的局部变量“skt”# skt.close()def portScan(hostname, ports):try:tgtIp = socket.gethostbyname(hostname)except:print('Cannot resolve %s:Unknown host'%hostname)socket.setdefaulttimeout(2)for port in ports:# 线程扫描t = th.Thread(target = connectScan, args = (tgtIp, port))t.start()
portScan('cowlevel.com',[20, 21, 22, 25, 80])
176.31.245.43 : 20 close
176.31.245.43 : 21 close
176.31.245.43 : 22 close
176.31.245.43 : 25 close
176.31.245.43 : 80 close
4.命令行下扫描端口
需要用到optparse库,解析命令行参数,调用optparse.OptionPaser([usage maessage])
生成一个参数解析器.通过add_option指定解析的命令行参数.
$ python portscan.py -H hostname.txt -P 20,21,22
考虑到对批量主机的扫描,第一个参数,hostname.txt是一个包含多个主机名的txt文件.
如下图所示:
import optparse
import socket
import threading as thscreenLock = th.Semaphore(value = 1)def connectScan(tgtip, port):try:skt = socket.socket(AF_INET, SOCK_STREAM)skt.connect((tgtip, port))skt.send('nice day/r/n')results = skt.recv(100)screenLock.acquire()print('[+] %17s : %d open '%(tgtip, port))print('[+] '+str(results))except:screenLock.acquire()print('[-] %17s : %d closed'%(tgtip, port))finally:screenLock.release()#skt.close()def portScan(hostname, ports):try:tgtIp = socket.gethostbyname(hostname)except:print('[-] Cannot resolve %s: Unknown host'%hostname)socket.setdefaulttimeout(2)for port in ports:t = th.Thread(target=connectScan, args=(tgtIp, int(port)))t.start()def main():parser = optparse.OptionParser('usage%prog -H <hostname.txt name> -P <target port>')parser.add_option('-H', dest='hostname', type='string')parser.add_option('-P', dest='port', type='string')(options, args) = parser.parse_args()hostname_txt_name = options.hostnameports = str(options.port).split(',')if (hostname_txt_name == None) | (ports[0] == None):print(parser.usage)exit(0)with open(hostname_txt_name,'r') as f:for hostname in f:portScan(hostname.strip('\n'), ports)
if __name__ == '__main__':main()
运行结果:
TCP端口扫描[Python3.5]相关推荐
- java 扫描tcp端口号_多线程TCP端口扫描 java实现
界面部分: import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt. ...
- 需要额外端口信息_使用Python进行TCP端口扫描
使用Python进行TCP端口扫描 首先我们供给一台主机,要进行的步骤就是对其主机端口的扫描,查看其中开放的端口. 我们创建一个TCP的全连接的扫描器,使用socket来创建连接器. 扫描端口开放 # ...
- 御剑高速TCP端口扫描工具
鉴于CSDN平台想恰钱想疯了,连下载个软件也要付费/VIP 那我在这里就无私贡献出珍藏的--御剑高速TCP端口扫描工具 网址:百度网盘 请输入提取码 提取码:7fk6
- 基于TCP端口扫描技术
基于TCP全开的端口扫描技术 TCP扫描基本概念 TCP端口扫描工具的编写 TCP扫描基本概念 首先介绍第一种扫描技术--TCP全开扫描.这种扫描的思想很简单,如果目标端口是开放的,那么在接到主机端口 ...
- Socket2实现tcp端口扫描
主要的界面如下: 主要代码如下: 1 //对于每一个线程,传过去的参数 2 typedef struct ThreadParamStruct 3 { 4 CString strIP; //要扫描的IP ...
- Python3实现TCP端口扫描器
本文来自 高海峰对 玄魂工作室 的投稿 作者:高海峰 QQ:543589796 在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤.通过端口扫描我们可 ...
- 第七章(五)—主动信息收集—端口扫描(基于TCP全连接扫描、隐蔽扫描、僵尸扫描、UDP的端口扫描)
`## 端口扫描 端口对应网络服务及应用端程序 服务端程序的漏洞通过端口攻入 发现开放的端口 更具体的攻击面 UDP端口扫描 向某一端口发送UDP数据包,如果目标ip给我一个ICMP prot-unr ...
- Kali Linux渗透测试之端口扫描(一)——UDP、TCP、隐蔽端口扫描、全连接端口扫描
端口扫描 二.三.四层发现的目的就是发现存活的IP,在存活的IP上面,展开进一步的扫描,及端口扫描,发现存活主机上存在着哪些开放的端口,端口后面就对应着各种各样的应用程序,应用程序的漏洞都是通过端口体 ...
- Kali渗透测试之端口扫描1——UDP、TCP、僵尸扫描、隐蔽扫描
端口扫描 每个服务器上面都会跑很多应用,每个应用都会侦听某些端口,通过侦听端口接收来自客户端或其他用户对应用程序的访问.所以在发现目标主机存活后,我们需要知道目标主机上都开放了那些端口,应用程序的漏洞 ...
- 小白日记10:kali渗透测试之端口扫描-UDP、TCP、僵尸扫描、隐蔽扫描
端口扫描 二三四层发现的目的只是为了准确发现所有活着主机IP,确定攻击面,端口扫描即发现攻击点,发现开放端口.端口对应网络服务及应用端程序,服务端程序的漏洞通过端口攻入.[所有的扫描结果,都不要完全相 ...
最新文章
- WinForm 曲线图控件
- 学习:双机热备、集群、负载均衡、SQL故障转移群集简单理解(转)
- css3让元素自适应高度
- Apache ZooKeeper - ZK的ACL权限控制( Access Control List )
- 【深度学习】Yolov5_DeepSort_Pytorch:基于 Yolov5 + Deep Sort 的实时多目标跟踪器
- SQL语句错误:Operand should contain 1 column(s)【查询多个字段不用加括号】
- 逻辑漏洞——权限控制问题
- 深入理解C语言——#define宏和枚举的区别
- windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一
- 学成在线--16.添加课程计划
- jsp----中文乱码
- SQL Server 2017 AlwaysOn AG 自动初始化(十六)
- 简单尝试windows多线程程序
- 区块链 Fisco bcos 智能合约(12)-Solidity的基础特性
- (10)Spring框架----AOP面向切面编程的实现原理
- 微信小程序-基于云开发 CMS + Vant Weapp 电商 Demo 来了!
- PHP:编写标准体重计算器
- OSChina 周五乱弹 ——妹子一不小心就被拖到小巷子里
- 单片机18b20c语言程序,单片机c语言ds18b20程序
- Subversive or Subclipse
热门文章
- 今天安利一个超牛叉的黑客入侵的特效网页,我第一次打开就被惊艳到了
- linux运行jar包依赖,linux怎么打jar包
- ajxa TypeError: $.ajax is not a function
- VS2015打开cshtml视图页文件报错 未将对象引用设置为实例 解决办法
- 优云automation实践技巧:简单4步完成自动化构建与发布
- leetcode 336. Palindrome Pairs
- 网页后门危害大 网站安全狗帮助查杀
- 看看这段代码有没有内存泄露?
- 使用 /proc 文件系统来控制系统
- 南阳oj-----Binary String Matching(string)