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

 更新时间:2017年03月15日 09:55:49   作者:keepmov  
本篇文章主要介绍了Python实现简易端口扫描器的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

在网上的一些资料的基础上自己又添了些新内容,算是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字符串中的r和u的区别

    浅析Python字符串中的r和u的区别

    在Python中,字符串前面我们经常看到会加一些前缀,例如u、r、b、f。这篇文章将带大家简单了解一下字符串前加r(R)或u/(U)的前缀的区别,快来跟随小编一起学习吧
    2021-12-12
  • python读取txt数据的操作步骤

    python读取txt数据的操作步骤

    这篇文章主要介绍了python读取txt数据的操作步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • python网络爬虫selenium打开多窗口与切换页面的实现

    python网络爬虫selenium打开多窗口与切换页面的实现

    本文主要介绍了python网络爬虫selenium打开多窗口与切换页面的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Python中创建相关系数矩阵的方法小结

    Python中创建相关系数矩阵的方法小结

    相关系数矩阵是一种用于衡量变量之间关系的重要工具,本文将介绍在 Python 中创建相关系数矩阵的不同方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • python使用udp实现聊天器功能

    python使用udp实现聊天器功能

    这篇文章主要介绍了python使用udp实现聊天器功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-12-12
  • python访问sqlserver示例

    python访问sqlserver示例

    这篇文章主要介绍了python访问sqlserver示例,需要的朋友可以参考下
    2014-02-02
  • Python之re模块详解

    Python之re模块详解

    这篇文章主要介绍了Python编程之Re模块下的函数介绍,还是比较不错的,这里分享给大家,供需要的朋友参考,希望能够给你带来帮助
    2021-09-09
  • python Scrapy框架原理解析

    python Scrapy框架原理解析

    这篇文章主要介绍了python Scrapy框架原理的相关资料,帮助大家更好的理解和使用python爬虫,感兴趣的朋友可以了解下
    2021-01-01
  • Python特殊属性property原理及使用方法解析

    Python特殊属性property原理及使用方法解析

    这篇文章主要介绍了Python特殊属性property原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 在Django的视图(View)外使用Session的方法

    在Django的视图(View)外使用Session的方法

    这篇文章主要介绍了在Django的视图(View)外使用Session的方法,Django是最具人气的Python web开发框架,需要的朋友可以参考下
    2015-07-07

最新评论