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文件夹与文件的操作实现代码
Jul 13 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
Python实现豆瓣图片下载的方法
May 25 Python
Python文件和流(实例讲解)
Sep 12 Python
python随机数分布random测试
Aug 27 Python
python opencv读mp4视频的实例
Dec 07 Python
利用python在excel里面直接使用sql函数的方法
Feb 08 Python
python中 * 的用法详解
Jul 10 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
django学习之ajax post传参的2种格式实例
May 14 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
关于php fread()使用技巧
2010/01/22 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
JS 跳转页面延迟2种方法
2013/03/29 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
基于JavaScript实现自定义滚动条
2017/01/25 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python中几种自动微分库解析
2019/08/29 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
weblogic面试题
2016/03/07 面试题
请说出你所知道的线程同步的方法
2013/04/19 面试题
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
ktv收银员岗位职责
2013/12/16 职场文书
银行服务感言
2014/03/01 职场文书
体育运动口号
2014/06/09 职场文书
公司合作协议范文
2014/10/01 职场文书
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
python playwright之元素定位示例详解
2022/07/23 Python