python进行TCP端口扫描的实现


Posted in Python onDecember 21, 2018

首先我们供给一台主机要进行的步骤就是对其主机端口的扫描,查看其中开放的端口。

我们首先创建一个TCP的全连接的扫描器。我们使用socket来创建连接器。

扫描端口开放

#测试当前主机和端口是否开放,直接使用socket连接
def connScan(host,port):
  try:
    connSkt = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    connSkt.connect((host,port))
    print("tcp open port:" + str(port))
  except:
    print('tcp closed:'+str(port))
def portScan(tgtHost, tgtPorts):  
  try:    
    tgtIP = socket.gethostbyname(tgtHost) 
  except:    
    print("[-] Cannot resolve '%s': Unknown host" % tgtHost)    
    return  
  try:    
    tgtName = socket.gethostbyaddr(tgtIP)  print('\n[+] Scan Results for: ' + tgtName[0])
  except:    
    print('\n[+] Scan Results for: ' + tgtIP)
  socket.setdefaulttimeout(1)  
  for tgtPort in tgtPorts:    
    print('Scanning port ' + str(tgtPort))    connScan(tgtHost, int(tgtPort))
portScan('www.baidu.com', [80,443,3389,1433,23,445])

对百度的端口进行扫描

[+] Scan Results for: 61.135.169.125
Scanning port 80
tcp open port:80
Scanning port 443
tcp open port:443
Scanning port 3389
tcp closed:3389
Scanning port 1433
tcp closed:1433
Scanning port 23
tcp closed:23
Scanning port 445
tcp closed:445

捕获应用标识

为了从捕获我们的目标主机的应用标识,我们必须首先插入额外的验证代码到 connScan函数中。一旦发现开放的端口,我们发送一个字符串数据到这个端 口然后等待响应。收集这些响应并推断可能会得到运行在目标主机端口上的应 用程序的一些信息。

#测试当前主机和端口是否开放,直接使用socket连接
def connScan(host,port):
  try:
    connSkt = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    connSkt.connect((host,port))
    connSkt.send('Python\r\n')
    results = connSkt.recv(100)
    print("tcp open port:" + str(port))
    print('[+] ' + str(results)) 
  except:
    print('tcp closed:'+str(port))
def portScan(tgtHost, tgtPorts):  
  try:    
    tgtIP = socket.gethostbyname(tgtHost) 
  except:    
    print("[-] Cannot resolve '%s': Unknown host" % tgtHost)    
    return  
  try:    
    tgtName = socket.gethostbyaddr(tgtIP)    
    print('\n[+] Scan Results for: ' + tgtName[0])
  except:    
    print('\n[+] Scan Results for: ' + tgtIP)
  socket.setdefaulttimeout(1)  
  for tgtPort in tgtPorts:    
    print('Scanning port ' + str(tgtPort))    
    connScan(tgtHost, int(tgtPort))
portScan('www.qq.com', [22,80,443,3389,1433,23,445])

多线程扫描

因为每一个socket都有时间延迟,每一个socket扫描都将会耗时几秒钟,虽 然看起来无足轻重,但是如果我们扫描多个端口和主机延迟时间将迅速增大。 理想情况下,我们希望这些socket按顺序扫描。引入Python线程。线程提供 了一种同时执行的方式。在我们的扫描中利用线程,只需将 portScan()函数的迭代改一下。请注意,我们可以把每一个connScan()函数都 当做是一个线程。在迭代的过程中产生的每一个线程将在同时执行。

for tgtPort in tgtPorts:
  print('Scanning port ' + str(tgtPort))
  t = threading.Thread(target=connScan, args=(tgtHost,
  int(tgtPort)))
  t.start()

使用nmap

import nmap
def nmapScan(tgtHost, tgtPort):
  nmScan = nmap.PortScanner()
  results = nmScan.scan(tgtHost, tgtPort)
  state = results['scan'][tgtHost]['tcp'][int(tgtPort)]['state']
  print(" [*] " + tgtHost + " tcp/" + tgtPort + " " + state)
  nmapScan('10.108.x.x','8080')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python处理大数字的方法
May 27 Python
Python打印斐波拉契数列实例
Jul 07 Python
Python 爬虫的工具列表大全
Jan 31 Python
python实现各进制转换的总结大全
Jun 18 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python中pytest收集用例规则与运行指定用例详解
Jun 27 Python
python元组和字典的内建函数实例详解
Oct 22 Python
python字符串替换re.sub()实例解析
Feb 09 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
python 多态 协议 鸭子类型详解
Nov 27 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 #Python
python解析json串与正则匹配对比方法
Dec 20 #Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 #Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 #Python
Python给定一个句子倒序输出单词以及字母的方法
Dec 20 #Python
python 读取竖线分隔符的文本方法
Dec 20 #Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 #Python
You might like
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
Node.js的文件权限及读写flag详解
2016/10/11 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
python SMTP实现发送带附件电子邮件
2018/05/22 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
2020/04/09 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
opencv 图像腐蚀和图像膨胀的实现
2020/07/07 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
纽约21世纪百货官网:Century 21
2016/08/27 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
应届毕业生简历自我评价
2014/01/31 职场文书
上课迟到检讨书
2014/02/19 职场文书
高三高考决心书
2014/03/11 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
小学六一儿童节活动方案
2014/08/27 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
法院授权委托书格式
2014/09/28 职场文书
2014年文明创建工作总结
2014/11/25 职场文书