使用Python编写简单的端口扫描器的实例分享


Posted in Python onDecember 18, 2015

单线程实现
单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务。随便修改了一下就ok了,代码如下,最终得到自己的IP地址。

#!/usr/bin/env python 
import socket 
if __name__=='__main__': 
  port=3389  
  s=socket.socket() 
  for cnt in range(253,2,-1): 
    address='XXX.XXX.XXX.'+str(cnt) #XXX.XXX.XXX IP网段 
    try: 
      s.connect((address,port)) 
      print address 
    except socket.error,e: 
      print 'Error OR Port Not Opened'

Python的代码简单明了,但是功能不简单,速度有些慢,主要还是单线程和网络的原因吧。改进一下可以当一个简陋的端口扫描器使用了,扫描指定网段、指定端口,多线程速度可能能好一点吧。

多线程实现
前几天看了个讲使用Python扫描端口的教程,看了之后自己也写了个扫描端口的脚本。记录下来,方便自己以后回顾。
端口扫描端口效果图

使用Python编写简单的端口扫描器的实例分享

python扫描器源代码

# -*- coding:utf8 -*-
#!/usr/bin/python
# Python:     2.7.8
# Platform:    Windows
# Authro:     wucl
# Program:     端口扫描
# History:     2015.6.1
 
import socket, time, thread
socket.setdefaulttimeout(3)
 
def socket_port(ip,port):
  """
  输入IP和端口号,扫描判断端口是否开放
  """
  try:
    if port>=65535:
      print u'端口扫描结束'
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    result=s.connect_ex((ip,port))
    if result==0:
      lock.acquire()
      print ip,u':',port,u'端口开放'
      lock.release()
    s.close()
  except:
    print u'端口扫描异常'
 
def ip_scan(ip):
  """
  输入IP,扫描IP的0-65534端口情况
  """
  try:
    print u'开始扫描 %s' % ip
    start_time=time.time()
    for i in range(0,65534):
      thread.start_new_thread(socket_port,(ip,int(i)))
    print u'扫描端口完成,总共用时 :%.2f' %(time.time()-start_time)
    raw_input("Press Enter to Exit")
  except:
    print u'扫描ip出错'
     
 
if __name__=='__main__':
  url=raw_input('Input the ip you want to scan:\n')
  lock=thread.allocate_lock()
  ip_scan(url)
Python 相关文章推荐
Python3基础之基本运算符概述
Aug 13 Python
python异常和文件处理机制详解
Jul 19 Python
Python自定义线程类简单示例
Mar 23 Python
Python中 map()函数的用法详解
Jul 10 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
Python中bisect的用法及示例详解
Jul 20 Python
Python json格式化打印实现过程解析
Jul 21 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
python 视频下载神器(you-get)的具体使用
Jan 06 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
十个Python程序员易犯的错误
Dec 15 #Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 #Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 #Python
分享Python字符串关键点
Dec 13 #Python
Python实时获取cmd的输出
Dec 13 #Python
一篇文章入门Python生态系统(Python新手入门指导)
Dec 11 #Python
深入源码解析Python中的对象与类型
Dec 11 #Python
You might like
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
php 启动报错如何解决
2014/01/17 PHP
php数组编码转换示例详解
2014/03/11 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
深入浅析php json 格式控制
2015/12/24 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
js实现简单的轮播图效果
2020/12/13 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
常用python编程模板汇总
2016/02/12 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
python适合人工智能的理由和优势
2019/06/28 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python 定义只读属性的实现方式
2020/03/05 Python
python有几个版本
2020/06/17 Python
python 如何对logging日志封装
2020/12/02 Python
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
优秀党务工作者事迹材料
2014/05/07 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
护士2014年终工作总结
2014/11/11 职场文书
世界红十字日活动总结
2015/02/10 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书