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 18 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
Nov 02 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
python列表list保留顺序去重的实例
Dec 14 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
django框架创建应用操作示例
Sep 26 Python
python字典setdefault方法和get方法使用实例
Dec 25 Python
pytorch 实现tensor与numpy数组转换
Dec 27 Python
你可能不知道的Python 技巧小结
Jan 29 Python
用python计算文件的MD5值
Dec 23 Python
关于python中模块和重载的问题
Nov 02 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文件读写操作之文件读取方法详解
2011/01/13 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[01:00:52]2018DOTA2亚洲邀请赛 4.4 淘汰赛 EG vs LGD 第一场
2018/04/05 DOTA
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
python 字典(dict)按键和值排序
2016/06/28 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
class类在python中获取金融数据的实例方法
2020/12/10 Python
室内设计专业个人的自我评价
2013/12/18 职场文书
电视购物广告词
2014/03/19 职场文书
大学新生入学感想
2015/08/07 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python