使用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类方法__init__和__del__构造、析构过程分析
Mar 06 Python
python中is与双等于号“==”的区别示例详解
Nov 21 Python
python re模块findall()函数实例解析
Jan 19 Python
Python3匿名函数用法示例
Jul 25 Python
python如何实现异步调用函数执行
Jul 08 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 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利用COM对象访问SQLServer、Access
2006/10/09 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
JS创建自定义表格具体实现
2014/02/11 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
Nodejs读取文件时相对路径的正确写法(使用fs模块)
2017/04/27 NodeJs
Express框架之connect-flash详解
2017/05/31 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
在Python的列表中利用remove()方法删除元素的教程
2015/05/21 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
Python中作用域的深入讲解
2018/12/10 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
写好自荐信的几个要点
2013/12/26 职场文书
本科生的职业生涯规划范文
2014/01/09 职场文书
上班玩手机检讨书
2014/02/17 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
设计专业自荐信
2014/06/19 职场文书
党支部特色活动方案
2014/08/20 职场文书
低碳环保演讲稿
2014/08/28 职场文书
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL