Python实现简易端口扫描器代码实例


Posted in Python onMarch 15, 2017

在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧。

#coding=utf-8
import socket
import time
import sys
import struct
import threading
from threading import Thread,activeCount

results=[]
def portScanner(ip,port):
  server = (ip,port)
  sockfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  sockfd.settimeout(0.1)     #设置阻塞模式下socket的超时时间
  ret = sockfd.connect_ex(server) #成功返回0,失败返回error的值。
  if not ret:
    sockfd.close()
    results.append([ip,port])
    #print '%s:%s is opened...' % (ip,port)
  else:
    sockfd.close()
    pass
  return ''
  

def ip2num(ip):     #将ip地址转换成数字
  lp = [int(x) for x in ip.split('.')]
  return lp[0] << 24 | lp[1] << 16 | lp[2] << 8 |lp[3]

def num2ip(num):
  ip = ['','','','']
  ip[3] = (num & 0xff)
  ip[2] = (num & 0xff00) >> 8
  ip[1] = (num & 0xff0000) >> 16
  ip[0] = (num & 0xff000000) >> 24
  return '%s.%s.%s.%s' % (ip[0],ip[1],ip[2],ip[3])

def iprange(ip1,ip2):
  num1 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip1)))[0])
  num2 =socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip2)))[0])
  tmp = num2 - num1
  if tmp < 0:
    return None
  else:
    return num1,num2,tmp


if __name__ == '__main__':

  if((len(sys.argv)!= 4)&(len(sys.argv)!= 2)):  #用法说明
    print 'Usage:\n\tscanner.py startip endip port'
    print '\tscanner.py ip'
    sys.exit()

  if len(sys.argv)==4:      #对某一IP段的扫描
    time_start=time.time()    #起始时间
    startip = sys.argv[1]    #起始IP
    endip = sys.argv[2]      #结束IP
    port = int(sys.argv[3])    #端口号

    res = iprange(startip,endip)
    if not res:
      print 'endip must be bigger than startone'
      sys.exit()
    elif res[2] == 0:
      portScanner(startip,port)
    else:
      for x in xrange(int(res[2])+1):    #IP地址依次递增
        startipnum = ip2num(startip)
        startipnum = startipnum + x
        if activeCount() <=1000:           
          Thread(target=portScanner,args=(num2ip(startipnum),port)).start()
        
    print "There are %d hosts." %len(results)
    results.sort()
    for ip,port in results:
      print "%s:%d is opened..." %(ip,port)
    times=time.time()-time_start      #用时
    print 'use time : %s' % times
        
  if len(sys.argv)==2:
    time_start=time.time()
    port=0
    ip=sys.argv[1]
    while(port<2000):
      if activeCount() <= 40:   #设置40线程扫描
        Thread(target = portScanner, args = (ip, port)).start()
        port=port+1
    results.sort()
    for ip,port in results:
      print "%s:%d is opened..." %(ip,port)
    times=time.time()-time_start
    print 'use time : %s' % times

使用效果如下:

Python实现简易端口扫描器代码实例

Python实现简易端口扫描器代码实例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
python发送邮件脚本
May 22 Python
python url 参数修改方法
Dec 26 Python
Python秒算24点实现及原理详解
Jul 29 Python
python取均匀不重复的随机数方式
Nov 27 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
Python使用sftp实现上传和下载功能(实例代码)
Mar 14 #Python
Python实现Youku视频批量下载功能
Mar 14 #Python
Python实现视频下载功能
Mar 14 #Python
python 实现自动远程登陆scp文件实例代码
Mar 13 #Python
python executemany的使用及注意事项
Mar 13 #Python
Python的标准模块包json详解
Mar 13 #Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 #Python
You might like
我的群发邮件程序
2006/10/09 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
2019/05/14 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
Python基本语法经典教程
2016/03/11 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
python 获取字符串MD5值方法
2018/05/29 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
Python如何调用外部系统命令
2019/08/07 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
详解Python 函数参数的拆解
2020/09/02 Python
python Scrapy爬虫框架的使用
2021/01/21 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
借款协议书范本
2014/04/22 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
小学班主任教育随笔
2015/08/15 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书