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文件写入实例分析
Apr 08 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
python与caffe改变通道顺序的方法
Aug 04 Python
Python引用计数操作示例
Aug 23 Python
基于python实现百度翻译功能
May 09 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 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
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP怎样用正则抓取页面中的网址
2016/08/09 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
2016/05/17 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
node.js中 redis 的安装和基本操作示例
2020/02/10 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
深入讲解Python编程中的字符串
2015/10/14 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
会计工作心得体会
2014/01/13 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
浅谈Python中的正则表达式
2021/06/28 Python