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常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
Aug 25 Python
Python之PyUnit单元测试实例
Oct 11 Python
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
用python找出那些被“标记”的照片
Apr 20 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
对Python中Iterator和Iterable的区别详解
Oct 18 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
Python中实现输入一个整数的案例
May 03 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
Oct 28 Python
Python 如何安装Selenium
May 06 Python
Python移位密码、仿射变换解密实例代码
Jun 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
php 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
php菜单/评论数据递归分级算法的实现方法
2019/08/01 PHP
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
js使用formData实现批量上传
2020/03/27 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
vue:el-input输入时限制输入的类型操作
2020/08/05 Javascript
跟老齐学Python之永远强大的函数
2014/09/14 Python
python下MySQLdb用法实例分析
2015/06/08 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
init进程的作用
2012/04/12 面试题
食堂个人先进事迹
2014/01/22 职场文书
幼儿园老师寄语
2014/04/03 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
个人年度总结报告
2015/03/09 职场文书
聊聊JS ES6中的解构
2021/04/29 Javascript
python 如何获取页面所有a标签下href的值
2021/05/06 Python
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle
Mysql数据库命令大全
2021/05/26 MySQL
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers