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使用socket进行简单网络连接的方法
Apr 29 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
Python将list中的string批量转化成int/float的方法
Jun 26 Python
python使用正则筛选信用卡
Jan 27 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
TensorFlow 读取CSV数据的实例
Feb 05 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
如何完美的建立一个python项目
Oct 09 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
如何删除多级目录
2006/10/09 PHP
php实现加减法验证码代码
2014/02/14 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
2017/04/13 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
2019/11/18 jQuery
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
Django发送html邮件的方法
2015/05/26 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
Python3处理HTTP请求的实例
2018/05/10 Python
python3 property装饰器实现原理与用法示例
2019/05/15 Python
Python安装依赖(包)模块方法详解
2020/02/14 Python
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
I.T集团香港官方商城:ITeSHOP.com Hong Kong
2019/02/15 全球购物
中学教师请假制度
2014/02/03 职场文书
教师个人自我鉴定
2014/02/08 职场文书
军训自我鉴定范文
2014/02/13 职场文书
网络编辑求职信
2014/04/30 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
交通事故被告答辩状
2015/05/22 职场文书
会计岗位工作总结
2015/08/12 职场文书
公司管理建议书
2015/09/14 职场文书
小学英语教学经验交流材料
2015/11/02 职场文书
分析Python感知线程状态的解决方案之Event与信号量
2021/06/16 Python