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脚本实现分析dns日志并对受访域名排行
Sep 18 Python
用Python操作字符串之rindex()方法的使用
May 19 Python
批处理与python代码混合编程的方法
May 19 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
Django中url的反向查询的方法
Mar 14 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
在PyCharm中三步完成PyPy解释器的配置的方法
Oct 29 Python
python yield和Generator函数用法详解
Feb 10 Python
python 读txt文件,按‘,’分割每行数据操作
Jul 05 Python
python编程的核心知识点总结
Feb 08 Python
Python关于OS文件目录处理的实例分享
May 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 日志缩略名的创建函数代码
2010/05/26 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
js style动态设置table高度
2014/10/21 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
angular中不同的组件间传值与通信的方法
2017/11/04 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
Vue简单实现原理详解
2020/05/07 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
[01:32]dota2拉比克至宝(222)
2018/12/20 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python实现简单的四则运算计算器
2016/11/02 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
简单了解python的break、continue、pass
2019/07/08 Python
Python @property及getter setter原理详解
2020/03/31 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
python的flask框架难学吗
2020/07/31 Python
金融行业务员的自我评价
2013/12/13 职场文书
开水果连锁店创业计划书
2013/12/29 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
技校毕业生自荐书
2014/05/23 职场文书
企业文化口号
2014/06/12 职场文书
大学生找工作求职信
2014/07/09 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
公司2014年度工作总结
2014/12/10 职场文书
优秀教师先进材料
2014/12/16 职场文书
实习单位推荐信
2015/03/27 职场文书
投诉书格式范本
2015/07/02 职场文书
python中mongodb包操作数据库
2022/04/19 Python