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 代码性能优化技巧分享
Aug 07 Python
跟老齐学Python之私有函数和专有方法
Oct 24 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
python3写爬取B站视频弹幕功能
Dec 22 Python
python判断数字是否是超级素数幂
Sep 27 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
Python select及selectors模块概念用法详解
Jun 22 Python
基于django2.2连oracle11g解决版本冲突的问题
Jul 02 Python
pycharm安装深度学习pytorch的d2l包失败问题解决
Mar 25 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
用Zend Encode编写开发PHP程序
2006/10/09 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
javascript 一些用法小结
2009/09/11 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
JavaScript中浅讲ajax图文详解
2016/11/11 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
Pandas之groupby( )用法笔记小结
2019/07/23 Python
Django项目创建到启动详解(最全最详细)
2019/09/07 Python
Django 返回json数据的实现示例
2020/03/05 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
英国在线泳装店:Simply Swim
2019/05/05 全球购物
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
材料员岗位职责
2014/03/13 职场文书
国际贸易系求职信
2014/08/09 职场文书
2014-2015学年工作总结
2014/11/27 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
2015年营业员工作总结
2015/04/23 职场文书
在职证明书模板
2015/06/15 职场文书
入学证明
2015/06/23 职场文书