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中getattr函数和hasattr函数作用详解
Jun 14 Python
使用Python对Csv文件操作实例代码
May 12 Python
Python中单、双下划线的区别总结
Dec 01 Python
微信跳一跳python代码实现
Jan 05 Python
python模块之paramiko实例代码
Jan 31 Python
python Django中models进行模糊查询的示例
Jul 18 Python
django项目登录中使用图片验证码的实现方法
Aug 15 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
Python语言编写智力问答小游戏功能
Oct 13 Python
python对文档中元素删除,替换操作
Apr 02 Python
python小型的音频操作库mp3Play
Apr 24 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 常用类汇总 推荐收藏
2010/05/13 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
PHP7常量数组用法分析
2016/09/26 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python之父谈Python的未来形式
2016/07/01 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python的互斥锁与信号量详解
2019/09/12 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
几道PHP的面试题
2012/05/19 面试题
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
自我评价优缺点范文
2015/03/11 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书