使用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多重继承实例
Oct 11 Python
详细解析Python中__init__()方法的高级应用
May 11 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
Python 中Pickle库的使用详解
Feb 24 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
在pycharm中实现删除bookmark
Feb 14 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
python安装后的目录在哪里
Jun 21 Python
Python self用法详解
Nov 28 Python
Python Django搭建文件下载服务器的实现
May 10 Python
Python实现科学占卜 让视频自动打码
Apr 09 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
php adodb介绍
2009/03/19 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
vue中created和mounted的区别浅析
2019/08/13 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
初中女生自我鉴定
2013/12/19 职场文书
十佳护士先进事迹
2014/05/08 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
2014年人大工作总结
2014/12/10 职场文书
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers