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 生成不重复的随机数的代码
May 15 Python
Python实现网站文件的全备份和差异备份
Nov 30 Python
Python字符串替换实例分析
May 11 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
Python pickle模块常用方法代码实例
Oct 10 Python
Python+OpenCV图像处理——实现直线检测
Oct 23 Python
利用python绘制正态分布曲线
Jan 04 Python
详解分布式系统中如何用python实现Paxos
May 18 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的引用计数机制
2013/06/14 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
利用Python获取赶集网招聘信息前篇
2016/04/18 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
Django日志及中间件模块应用案例
2020/09/10 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
行政主管职责范本
2014/03/07 职场文书
2014年教师节寄语
2014/08/11 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014教师年度工作总结
2014/11/10 职场文书
义诊活动通知
2015/04/24 职场文书
2015年行政部工作总结
2015/04/28 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL