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查找电脑文件
Apr 27 Python
python计算两个数的百分比方法
Jun 29 Python
详解Python中的type和object
Aug 15 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
解决python 找不到module的问题
Feb 12 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
Python configparser模块配置文件过程解析
Mar 03 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 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模拟SQL Server的两个日期处理函数
2006/10/09 PHP
PHP静态类
2006/11/25 PHP
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
php代码书写习惯优化小结
2013/06/20 PHP
PHP中把数据库查询结果输出为json格式简单实例
2015/04/09 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
PHP输入流php://input实例讲解
2015/12/22 PHP
php新建文件的方法实例
2019/09/26 PHP
Javascript - HTML的request类
2006/07/15 Javascript
prototype 1.5 & scriptaculous 1.6.1 学习笔记
2006/09/07 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
2013/07/09 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
jQuery使用ajax传递json对象到服务端及contentType的用法示例
2020/03/12 jQuery
python实现图片批量剪切示例
2014/03/25 Python
Python实现全角半角转换的方法
2014/08/18 Python
python保存字符串到文件的方法
2015/07/01 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
募捐倡议书怎么写
2014/05/14 职场文书
2014年无财产无子女离婚协议书范本
2014/10/09 职场文书
财务工作检讨书
2014/10/29 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
《风娃娃》教学反思
2016/02/18 职场文书