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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
查看django版本的方法分享
May 14 Python
使用Python快速搭建HTTP服务和文件共享服务的实例讲解
Jun 04 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
Python3.5文件修改操作实例分析
May 01 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
Python Des加密解密如何实现软件注册码机器码
Jan 08 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
详解python metaclass(元类)
Aug 13 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
php自动适应范围的分页代码
2008/08/05 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
2014/05/08 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
javascript同步Import,同步调用外部js的方法
2008/07/08 Javascript
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
jQuery中使用了document和window哪些属性和方法小结
2011/09/13 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
Vue内容分发slot(全面解析)
2017/08/19 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
Python判断两个对象相等的原理
2017/12/12 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python获取代码运行时间的实例代码
2018/06/11 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
python自动下载图片的方法示例
2020/03/25 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
2015年幼儿园毕业感言
2014/02/12 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
环境保护标语
2014/06/20 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
2015年征兵工作总结
2015/07/23 职场文书