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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
Python smallseg分词用法实例分析
May 28 Python
深入学习Python中的装饰器使用
Jun 20 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
python中的数据结构比较
May 13 Python
Python批量处理csv并保存过程解析
May 16 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
Jun 17 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 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
短波收音机简介
2021/03/01 无线电
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
基于mysql的论坛(1)
2006/10/09 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
python获取从命令行输入数字的方法
2015/04/29 Python
关于Python元祖,列表,字典,集合的比较
2017/01/06 Python
python opencv摄像头的简单应用
2019/06/06 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
Python使用configparser读取ini配置文件
2020/05/25 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
Exception类的常用方法
2012/06/16 面试题
汽车专业人才自我鉴定范文
2013/12/29 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
公务员政审材料范文
2014/12/23 职场文书