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_LDA实现方法详解
Oct 25 Python
Python内置函数delattr的具体用法
Nov 23 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
Aug 26 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Python中的全局变量如何理解
Jun 04 Python
通俗讲解python 装饰器
Sep 07 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
Python源码解析之List
May 21 Python
python可视化大屏库big_screen示例详解
Nov 23 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入门
2006/10/09 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
利用PHPExcel实现Excel文件的写入和读取
2017/04/26 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
在JavaScript中使用inline函数的问题
2007/03/08 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
Python3实现从指定路径查找文件的方法
2015/05/22 Python
python实现实时监控文件的方法
2016/08/26 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
python tkinter界面居中显示的方法
2018/10/11 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python 命名规范知识点汇总
2020/02/14 Python
python 的topk算法实例
2020/04/02 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
制定岗位职责的原则
2013/11/08 职场文书
外贸业务员的岗位职责
2013/11/23 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
干部下基层实施方案
2014/03/14 职场文书
学校先进集体事迹材料
2014/05/31 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
人才市场接收函
2015/01/30 职场文书
初中教师个人工作总结
2015/02/10 职场文书
小学教育见习总结
2015/06/23 职场文书
教学反思怎么写
2016/02/24 职场文书
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL