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 相关文章推荐
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
Python中使用动态变量名的方法
May 06 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
python线程池threadpool实现篇
Apr 27 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
Oct 17 Python
python保存字典和读取字典的实例代码
Jul 07 Python
浅谈Python_Openpyxl使用(最全总结)
Sep 05 Python
Python实现分数序列求和
Feb 25 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
解决python3输入的坑——input()
Dec 05 Python
Python datetime模块的使用示例
Feb 02 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
详解微信小程序开发之下拉刷新 上拉加载
2016/11/24 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
Vue实现移动端左右滑动效果的方法
2018/11/27 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
JavaScript实现多文件下载方法解析
2020/08/07 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
python ElementTree 基本读操作示例
2009/04/09 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
python中关于数据类型的学习笔记
2020/07/19 Python
Java如何格式化日期
2012/08/07 面试题
如何定义一个可复用的服务
2014/09/30 面试题
测量实习生自我鉴定
2013/09/19 职场文书
函授毕业自我鉴定
2013/12/19 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
三年级小学生评语
2014/04/22 职场文书
商场促销活动总结
2014/07/10 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
Python编程编写完善的命令行工具
2021/09/15 Python
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python