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中list初始化方法示例
Sep 18 Python
Python构建网页爬虫原理分析
Dec 19 Python
python Crypto模块的安装与使用方法
Dec 21 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
对python读取zip压缩文件里面的csv数据实例详解
Feb 08 Python
利用Django模版生成树状结构实例代码
May 19 Python
如何给Python代码进行加密
Jan 10 Python
python使用QQ邮箱实现自动发送邮件
Jun 22 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
python的链表基础知识点
Sep 13 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
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
php学习笔记之基础知识
2014/11/08 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
PHP常用的小程序代码段
2015/11/14 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
2014/01/22 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
几种响应式文字详解
2017/05/19 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python 解析XML文件
2009/04/15 Python
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python批量提取word内信息
2015/08/09 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Pytorch释放显存占用方式
2020/01/13 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
春节活动策划方案
2014/01/24 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
白酒代理协议书范本
2014/10/26 职场文书
骨干教师个人总结
2015/02/11 职场文书
护士个人总结范文
2015/02/13 职场文书
大学团日活动总结书
2015/05/11 职场文书
小学三年级数学教学反思
2016/02/16 职场文书