使用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 相关文章推荐
python使用xauth方式登录饭否网然后发消息
Apr 11 Python
详解使用python crontab设置linux定时任务
Dec 08 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
Python识别html主要文本框过程解析
Feb 18 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
Python字符串格式化f-string多种功能实现
May 07 Python
浅谈Python中的字符串
Jun 10 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
python Tkinter模块使用方法详解
Apr 07 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 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
php实现ip白名单黑名单功能
2015/03/12 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
SVG描边动画
2017/02/23 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
2021/01/29 Vue.js
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
Python代码实现KNN算法
2017/12/20 Python
简单了解django缓存方式及配置
2019/07/19 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
考试没考好检讨书
2014/01/31 职场文书
领导接待方案
2014/03/13 职场文书
灰雀教学反思
2014/04/28 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
设备售后服务承诺书
2014/05/30 职场文书
人事任命书范文
2014/06/04 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
银行招聘自荐信
2015/03/06 职场文书
学雷锋感言
2015/08/03 职场文书
2016国庆促销广告语
2016/01/28 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android
vue修饰符.capture和.self的区别
2022/04/22 Vue.js