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中的文件和目录操作实现代码
Mar 13 Python
简单学习Python time模块
Apr 29 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
单利模式及python实现方式详解
Mar 20 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
Mar 14 Python
python字典嵌套字典的情况下找到某个key的value详解
Jul 10 Python
python中使用while循环的实例
Aug 05 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
哪些是python中web开发框架
Jun 17 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 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
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
PHP获取网站域名和地址的代码
2008/08/17 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
jQuery实现遮罩层登录对话框
2016/12/29 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
2019/07/22 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
Python实现动态添加属性和方法操作示例
2018/07/25 Python
学生信息管理系统python版
2018/10/17 Python
django迁移数据库错误问题解决
2019/07/29 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
pycharm永久激活超详细教程
2020/10/29 Python
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
机械专业技术员求职信
2014/06/14 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
保护环境的宣传语
2015/07/13 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android