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实现socket客户端和服务端简单示例
Feb 24 Python
python分析nignx访问日志脚本分享
Feb 26 Python
python中while循环语句用法简单实例
May 07 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Python3最长回文子串算法示例
Mar 04 Python
Python中print和return的作用及区别解析
May 05 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 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
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
MySQL授权问题总结
2007/05/06 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
2010/12/10 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
原生js二级联动效果
2017/06/20 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
JS实现简易计算器
2020/02/14 Javascript
python实现代理服务功能实例
2013/11/15 Python
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
pandas DataFrame索引行列的实现
2019/06/04 Python
Python:Numpy 求平均向量的实例
2019/06/29 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
为什么说python更适合树莓派编程
2020/07/20 Python
Python LMDB库的使用示例
2021/02/14 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
学习十八大报告感言
2014/02/28 职场文书
道路运输企业安全生产责任书
2014/07/28 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
学生保证书格式
2015/02/27 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers