在ros中使用rplidar Laser发布scan数据--25

原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/

由于市面上买的激光雷达价格太贵了。所以在学习时会造成很大的经济压力。但是最近好多做机器人核心组件的公司都开发有廉价的雷达;

本博客教你如何 使用rplidar发布scan数据,在rviz视图中查看scan数据。

1.首先确保你的rplidar水平放置在你的机器人上:(注意安装方向)

2.然后下载rplidar的rosSDK开发包,

3.初步测试:

运行roscore

roscore &

直接运行rplidar的launch文件

roslaunch rplidar_ros view_rplidar.launch 

 查看view_rplidar.launch文件

<!--
  Used for visualising rplidar in action.  
  
  It requires rplidar.launch.
 -->
<launch>
  <include file="$(find rplidar_ros)/launch/rplidar.launch" />

  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find rplidar_ros)/rviz/rplidar.rviz" />
</launch>

 主要是查看rplidar.launch文件

<launch>
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">
  <param name="serial_port"         type="string" value="/dev/ttyUSB0"/>  
  <param name="serial_baudrate"     type="int"    value="115200"/>
  <param name="frame_id"            type="string" value="laser"/>
  <param name="inverted"            type="bool"   value="false"/>
  <param name="angle_compensate"    type="bool"   value="true"/>
  </node>
</launch>

 在这个launch文件中打开了rplidarNode这个节点,然后我们分析一下节点源码:

#include "ros/ros.h"
#include "sensor_msgs/LaserScan.h"
#include "std_srvs/Empty.h"

#include "rplidar.h" //RPLIDAR standard sdk, all-in-one header

#ifndef _countof
#define _countof(_Array) (int)(sizeof(_Array) / sizeof(_Array[0]))
#endif

#define DEG2RAD(x) ((x)*M_PI/180.)

using namespace rp::standalone::rplidar;

RPlidarDriver * drv = NULL;

void publish_scan(ros::Publisher *pub, 
                  rplidar_response_measurement_node_t *nodes, 
                  size_t node_count, ros::Time start,
                  double scan_time, bool inverted, 
                  float angle_min, float angle_max, 
                  std::string frame_id)
{
    static int scan_count = 0;
    sensor_msgs::LaserScan scan_msg;

    scan_msg.header.stamp = start;
    scan_msg.header.frame_id = frame_id;
    scan_count++;

    scan_msg.angle_min =  M_PI - angle_min;
    scan_msg.angle_max =  M_PI - angle_max;
    scan_msg.angle_increment = 
        (scan_msg.angle_max - scan_msg.angle_min) / (double)(node_count-1);

    scan_msg.scan_time = scan_time;
    scan_msg.time_increment = scan_time / (double)(node_count-1);

    scan_msg.range_min = 0.15;
    scan_msg.range_max = 6.;

    scan_msg.intensities.resize(node_count);
    scan_msg.ranges.resize(node_count);
    if (!inverted) { // assumes scan window at the top
        for (size_t i = 0; i < node_count; i++) {
            float read_value = (float) nodes[i].distance_q2/4.0f/1000;
            if (read_value == 0.0)
                scan_msg.ranges[i] = std::numeric_limits<float>::infinity();
            else
                scan_msg.ranges[i] = read_value;
            scan_msg.intensities[i] = (float) (nodes[i].sync_quality >> 2);
        }
    } else {
        for (size_t i = 0; i < node_count; i++) {
            float read_value = (float)nodes[i].distance_q2/4.0f/1000;
            if (read_value == 0.0)
                scan_msg.ranges[node_count-1-i] = std::numeric_limits<float>::infinity();
            else
                scan_msg.ranges[node_count-1-i] = read_value;
            scan_msg.intensities[node_count-1-i] = (float) (nodes[i].sync_quality >> 2);
        }
    }

    pub->publish(scan_msg);
}

bool checkRPLIDARHealth(RPlidarDriver * drv)
{
    u_result     op_result;
    rplidar_response_device_health_t healthinfo;

    op_result = drv->getHealth(healthinfo);
    if (IS_OK(op_result)) { 
        printf("RPLidar health status : %d\n", healthinfo.status);
        
        if (healthinfo.status == RPLIDAR_STATUS_ERROR) {
            fprintf(stderr, "Error, rplidar internal error detected."
                            "Please reboot the device to retry.\n");
            return false;
        } else {
            return true;
        }

    } else {
        fprintf(stderr, "Error, cannot retrieve rplidar health code: %x\n", 
                        op_result);
        return false;
    }
}

bool stop_motor(std_srvs::Empty::Request &req,
                std_srvs::Empty::Response &res)
{
  if(!drv)
    return false;

  ROS_DEBUG("Stop motor");
  drv->stop();
  drv->stopMotor();
  return true;
}

bool start_motor(std_srvs::Empty::Request &req,
                std_srvs::Empty::Response &res)
{
  if(!drv)
    return false;
  ROS_DEBUG("Start motor");
  drv->startMotor();
  drv->startScan();;
  return true;
}


int main(int argc, char * argv[]) {
    ros::init(argc, argv, "rplidar_node");

    std::string serial_port;
    int serial_baudrate = 115200;
    std::string frame_id;
    bool inverted = false;
    bool angle_compensate = true;

    ros::NodeHandle nh;
    ros::Publisher scan_pub = nh.advertise<sensor_msgs::LaserScan>("scan", 1000);
    ros::NodeHandle nh_private("~");
    nh_private.param<std::string>("serial_port", serial_port, "/dev/ttyUSB0"); 
    nh_private.param<int>("serial_baudrate", serial_baudrate, 115200); 
    nh_private.param<std::string>("frame_id", frame_id, "laser_frame");
    nh_private.param<bool>("inverted", inverted, "false");
    nh_private.param<bool>("angle_compensate", angle_compensate, "true");
    
    u_result     op_result;
   
    // create the driver instance
    drv = RPlidarDriver::CreateDriver(RPlidarDriver::DRIVER_TYPE_SERIALPORT);
    
    if (!drv) {
        fprintf(stderr, "Create Driver fail, exit\n");
        return -2;
    }

    // make connection...
    if (IS_FAIL(drv->connect(serial_port.c_str(), (_u32)serial_baudrate))) {
        fprintf(stderr, "Error, cannot bind to the specified serial port %s.\n"
            , serial_port.c_str());
        RPlidarDriver::DisposeDriver(drv);
        return -1;
    }

    // check health...
    if (!checkRPLIDARHealth(drv)) {
        RPlidarDriver::DisposeDriver(drv);
        return -1;
    }


    ros::ServiceServer stop_motor_service = nh.advertiseService("stop_motor", stop_motor);
    ros::ServiceServer start_motor_service = nh.advertiseService("start_motor", start_motor);
    
    // start scan...
    drv->startScan();

    ros::Time start_scan_time;
    ros::Time end_scan_time;
    double scan_duration;
    while (ros::ok()) {

        rplidar_response_measurement_node_t nodes[360*2];
        size_t   count = _countof(nodes);

        start_scan_time = ros::Time::now();
        op_result = drv->grabScanData(nodes, count);
        end_scan_time = ros::Time::now();
        scan_duration = (end_scan_time - start_scan_time).toSec() * 1e-3;

        if (op_result == RESULT_OK) {
            op_result = drv->ascendScanData(nodes, count);

            float angle_min = DEG2RAD(0.0f);
            float angle_max = DEG2RAD(359.0f);
            if (op_result == RESULT_OK) {
                if (angle_compensate) {
                    const int angle_compensate_nodes_count = 360;
                    const int angle_compensate_multiple = 1;
                    int angle_compensate_offset = 0;
                    rplidar_response_measurement_node_t angle_compensate_nodes[angle_compensate_nodes_count];
                    memset(angle_compensate_nodes, 0, angle_compensate_nodes_count*sizeof(rplidar_response_measurement_node_t));
                    int i = 0, j = 0;
                    for( ; i < count; i++ ) {
                        if (nodes[i].distance_q2 != 0) {
                            float angle = (float)((nodes[i].angle_q6_checkbit >> RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT)/64.0f);
                            int angle_value = (int)(angle * angle_compensate_multiple);
                            if ((angle_value - angle_compensate_offset) < 0) angle_compensate_offset = angle_value;
                            for (j = 0; j < angle_compensate_multiple; j++) {
                                angle_compensate_nodes[angle_value-angle_compensate_offset+j] = nodes[i];
                            }
                        }
                    }
  
                    publish_scan(&scan_pub, angle_compensate_nodes, angle_compensate_nodes_count,
                             start_scan_time, scan_duration, inverted,  
                             angle_min, angle_max, 
                             frame_id);
                } else {
                    int start_node = 0, end_node = 0;
                    int i = 0;
                    // find the first valid node and last valid node
                    while (nodes[i++].distance_q2 == 0);
                    start_node = i-1;
                    i = count -1;
                    while (nodes[i--].distance_q2 == 0);
                    end_node = i+1;

                    angle_min = DEG2RAD((float)(nodes[start_node].angle_q6_checkbit >> RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT)/64.0f);
                    angle_max = DEG2RAD((float)(nodes[end_node].angle_q6_checkbit >> RPLIDAR_RESP_MEASUREMENT_ANGLE_SHIFT)/64.0f);

                    publish_scan(&scan_pub, &nodes[start_node], end_node-start_node +1, 
                             start_scan_time, scan_duration, inverted,  
                             angle_min, angle_max, 
                             frame_id);
               }
            } else if (op_result == RESULT_OPERATION_FAIL) {
                // All the data is invalid, just publish them
                float angle_min = DEG2RAD(0.0f);
                float angle_max = DEG2RAD(359.0f);

                publish_scan(&scan_pub, nodes, count, 
                             start_scan_time, scan_duration, inverted,  
                             angle_min, angle_max, 
                             frame_id);
            }
        }

        ros::spinOnce();
    }
    
    // done!
    RPlidarDriver::DisposeDriver(drv);
    return 0;
}

 

 主要是打开串口读取rplidar的数据,然后发布scan话题。

查看rqt_graph节点视图。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
X-Scan-v3.1 使用说明 一. 系统要求:Windows NT4/2000/XP/2003 二. 功能简介: 采用多线程方式对指定IP地址段(或单机)进行安全漏洞检测,支持插件功能,提供了图形界面和命令行两种操作方式,扫描内容包括:远程服务类型、操作系统类型及版本,各种弱口令漏洞、后门、应用服务漏洞、网络设备漏洞、拒绝服务漏洞等二十几个大类。对于多数已知漏洞,我们给出了相应的漏洞描述、解决方案及详细描述链接,其它漏洞资料正在进一步整理完善,您也可以通过本站的“安全文摘”和“安全漏洞”栏目查阅相关说明。 3.0版本提供了简单的插件开发包,便于有编程基础的朋友自己编写或将其他调试通过的代码修改为X-Scan插件。另外Nessus攻击脚本的翻译工作已经开始,欢迎所有对网络安全感兴趣的朋友参与。需要“Nessus攻击脚本引擎”源代码、X-Scan插件SDK、示例插件源代码或愿意参与脚本翻译工作的朋友,可通过本站“X-Scan”项目链接获取详细资料:“http://www.xfocus.net/projects/X-Scan/index.html”。 三. 所需文件: xscan_gui.exe -- X-Scan图形界面主程序 xscan.exe -- X-Scan命令行主程序 checkhost.exe -- 插件调度主程序 update.exe -- 在线升级主程序 *.dll -- 主程序所需动态链接库 使用说明.txt -- X-Scan使用说明 /dat/language.ini -- 多语言配置文件,可通过设置“LANGUAGE\SELECTED”项进行语言切换 /dat/language.* -- 多语言数据文件 /dat/config.ini -- 用户配置文件,用于保存待检测端口列表、CGI漏洞检测的相关设置及所有字典文件名称(含相对路径) /dat/config.bak -- 备份配置文件,用于恢复原始设置 /dat/cgi.lst -- CGI漏洞列表 /dat/iis_code.ini -- IIS编码漏洞列表 /dat/port.ini -- 用于保存已知端口的对应服务名称 /dat/*_user.dic -- 用户名字典文件,用于检测弱口令用户 /dat/*_pass.dic -- 密码字典,用于检测弱口令用户 /dat/p0f*.fp -- 识别远程主机操作系统所需的操作系统特征码配置文件(被动识别) /dat/nmap-os-fingerprints -- 识别远程主机操作系统所需的操作系统特征码配置文件(主动识别) /dat/wry.dll -- “IP-地理位置”地址查询数据库文件 /dat/*.nsl -- 经过整理的NASL脚本列表 /plugins -- 用于存放所有插件(后缀名为.xpn) /scripts -- 用于存放所有NASL脚本(后缀名为.nasl) /scripts/desc -- 用于存放所有NASL脚本多语言描述(后缀名为.desc) 注:xscan_gui.exe与xscan.exe共用所有插件及数据文件,但二者之间有任何依赖关系,均可独立运行。 四. 准备工作: X-Scan是完全免费软件,无需注册,无需安装(解压缩即可运行,自动检查并安装WinPCap驱动程序)。 五. 图形界面设置项说明: “基本设置”页: “指定IP范围” - 可以输入独立IP地址或域名,也可输入以“-”和“,”分隔的IP范围,如“192.168.0.1-192.168.0.20,192.168.1.10-192.168.1.254”。 “从文件获取主机列表” - 选该复选框将从文件读取待检测主机地址,文件格式应为纯文本,每一行可包含独立IP或域名,也可包含以“-”和“,”分隔的IP范围。 “报告文件” - 扫描结束后生成的报告文件名,保存在LOG目录下。 “报告文件类型” - 目前支持TXT和HTML两种格式 “扫描完成后自动生成并显示报告” - 如标题所述 “保存主机列表” - 选该复选框后,扫描过程检测到存活状态主机将自动记录到列表文件。 “列表文件” - 用于保存主机列表的文件名,保存在LOG目录下。 “高级设置”页: “最大并发线程数量” - 扫描过程最多可以启动的扫描线程数量 “最大并发主机数量” - 可以同时检测的主机数量。每扫描一个主机将启动一个CheckHost进程。 “显示详细进度” - 将在主界面普通信息栏显示详细的扫描过程 “跳过有响应的主机” - 如果X-Scan运行于NT4.0系统,只能通过ICMP Ping方式对目标主机进行检测,而在WIN2K以上版本的Windows系统下,若具备管理员权限则通过TCP Ping的方式进行存活性检测。 “跳过有检测到开放端口的主机” - 若在用户指定的TCP端口范围内有发现开放端口,将跳过对该主机的后续检测。 “无条件扫描” - 如标题所述 “端口相关设置”页: “待检测端口” - 输入以“-”和“,”分隔的TCP端口范围 “检测方式” - 目前支持TCP完全连接和SYN半开扫描两种方式 “根据响应识别服务” - 根据端口返回的信息智能判断该端口对应的服务 “主动识别操作系统类型” - 端口扫描结束后采用NMAP的方法由TCP/IP堆栈指纹识别目标操作系统 “预设知名服务端口” - 如标题所述 “SNMP相关设置”页: 全部如标题所述 “NETBIOS相关设置”页: 全部如标题所述 “NASL相关设置”页: “攻击脚本列表” - 由于目前Scripts目录的脚本数量已近2000个,在批量扫描可以通过定制脚本列表,只选取高风险级别漏洞进行检测,以加快扫描速度。若需要选择所有脚本,应将该输入框清空。 “选择脚本” - 打开脚本选择窗口,通过风险级别、检测手段、漏洞类型等分类方式定制脚本列表 “脚本运行超时(秒)” - 设置一个脚本可运行的最长时间,超时后将被强行终止 “网络读取超时(秒)” - 设置TCP连接每次读取数据的最长时间,超时数据将被忽略 “跳过针对主机的破坏性脚本” - 如标题所述 “检测脚本间的依赖关系” - NASL脚本间相互是有关联的,比如一个脚本先获取服务的版本,另一个脚本再根据服务版本进行其他检测。如果打乱了脚本的执行顺序可能会影响扫描结果,但也由于脚本间不需要互相等待,会节省扫描时间。 “顺序执行针对服务的破坏性脚本” - 如果一个脚本正在尝试D.O.S某个服务,另一个脚本同时在获取该服务信息,或同时有其他脚本尝试溢出该服务,将导致扫描结果不正确。但如果脚本间不需要互相等待,将会节省扫描时间。 “网络设置”页: “网络适配器” - 选择适当的网络适配器以便WinPCap驱动过滤相应的数据报,否则可能会漏报由WinPCap驱动接收数据的NASL脚本检测结果,也会影响采用NMAP的方法识别目标操作系统的结果。对于拨号用户,应当选择“\Device\Packet_NdisWanIp”。 “CGI相关设置”页: “CGI编码方案” - 全部如标题所述 “字典文件设置”页: 设置各服务对应的密码字典文件 六. 命令行方式运行参数说明: 1.命令格式: xscan -host [-] [其他选项] xscan -file [其他选项] 其 含义如下: -active : 检测目标主机是否存活 -os : 检测远程操作系统类型(通过NETBIOS和SNMP协议) -port : 检测常用服务的端口状态 -ftp : 检测FTP弱口令 -pub : 检测FTP服务匿名用户写权限 -pop3 : 检测POP3-Server弱口令 -smtp : 检测SMTP-Server漏洞 -sql : 检测SQL-Server弱口令 -smb : 检测NT-Server弱口令 -iis : 检测IIS编码/解码漏洞 -cgi : 检测CGI漏洞 -nasl : 加载Nessus攻击脚本 -all : 检测以上所有项目 [其他选项] 含义如下: -i : 设置网络适配器, 可通过"-l"参数获取 -l: 显示所有网络适配器 -v: 显示详细扫描进度 -p: 跳过有响应的主机 -o: 跳过有检测到开放端口的主机 -t : 指定最大并发线程数量和并发主机数量, 默认数量为100,10 -log : 指定扫描报告文件名, TXT或HTML后缀 * cgi及iis参数“编码方案”含义: 1.用“HEAD”替换“GET” 2.用“POST”替换“GET” 3.用“GET / HTTP/1.0\r\nHeader:” 替换 “GET” 4.用“GET /[filename]?param=” 替换 “GET”(可通过\dat\config.ini文件的“CGI-ENCODE\encode4_index_file”项设置[filename]) 5.用“GET ” 替换 “GET” 6.多个“/”或“\” 7.“/”与“\”互换 8.用“”替换“” 注:各变形方案若不冲突则可以同时使用,如“-cgi 1,6,8”表示同时使用第1、6、8号方案对HTTP请求进行变形。 2.示例: xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -all -active -p 含义:检测xxx.xxx.1.1-xxx.xxx.255.255网段内主机的所有漏洞,跳过无响应的主机; xscan -host xxx.xxx.1.1-xxx.xxx.255.255 -port -smb -t 150 -o 含义:检测xxx.xxx.1.1-xxx.xxx.255.255网段内主机的标准端口状态,NT弱口令用户,最大并发线程数量为150,跳过有检测到开放端口的主机; xscan -file hostlist.txt -port -cgi -t 200,5 -v -o 含义:检测“hostlist.txt”文件列出的所有主机的标准端口状态,CGI漏洞,最大并发线程数量为200,同一时刻最多检测5台主机,显示详细检测进度,跳过有检测到开放端口的主机; 七. 常见问题解答: Q:如果有安装WinPCap驱动程序是否能正常使用X-Scan进行扫描? A:如果系统未安装WinPCap驱动,X-Scan启动后会自动安装WinPCap 2.3;如果系统已经安装了WinPCap更高版本,X-Scan则使用已有版本。“WinPCap 3.1 beta”存在BUG,可能导致X-Scan扫描进程异常,建议使用“WinPCap 2.3”。 Q:扫描一个子网,进程里同时出现10个checkhost.exe的进程是什么原因? A:检测每个主机都会单独起一个Checkhost.exe进程,检测完毕会自动退出。并发主机数量可以通过图形界面的设置窗口设定,命令行程序通过“-t”参数设定。 Q:扫描过程机器突然蓝屏重启是什么原因? A:扫描过程系统蓝屏是有可能的,AtGuard、天网等防火墙的驱动程序在处理特殊包的时候有可能出错导致系统崩溃,另外很多防火墙驱动与WinPCap驱动本身也存在冲突,建议先禁止或卸载防火墙程序再试试。 Q:操作系统识别不正确是什么原因? A:操作系统识别方面确实不能保证100%的准确率,目前是综合NMAP、P0F的指纹库、NETBIOS信息和SNMP信息进行识别,如果目标机器有开放NETBIOS和SNMP协议,TCP/IP堆栈指纹也不在数据,就需要使用者根据其他信息综合分析了。 Q:为什么在一次扫描我选择了“SYN”方式进行端口扫描,但X-Scan实际采用的是“TCP”方式,而且也有被动识别出目标操作系统? A:端口扫描的“SYN”方式和被动主机操作系统识别功能在NT4系统下无法使用,在windows 2000等系统下使用时必须拥有管理员权限,否则将自动改用“TCP”方式进行端口扫描。 Q:新版本是否兼容2.3版本的插件? A:X-Scan 3.0的插件接口做了少量修改,不兼容2.3以前版本的插件,需要原作者做相应修改。3.0版本提供了简单的开发库,插件开发方面要比2.3版本轻松许多。 Q:X-Scan 3.0“跳过有响应的主机”具体含义是什么? A:检测存活主机是由CheckActive插件完成的。如果X-Scan运行于NT4.0系统,只能通过ICMP Ping方式对目标主机进行检测,而在WIN2K以上版本的Windows系统下,若具备管理员权限则通过TCP Ping的方式进行存活性检测。 Q:我看到Scripts目录下有很多nessus的脚本,是否可以自己从nessus的网站上下载最新的plugin,然后解压到scripts目录,实现扫描最新漏洞? A:X-Scan移植了nessus的nasl引擎,目前对应于nessus2.0.10a。所以只要是这个版本的nessus支持的脚本,都可以复制到Scripts目录下加载,但需要在配置界面里把“NASL相关设置”页的“攻击脚本列表”框清空,或者通过“选择脚本”把新脚本加入列表。 Q:X-Scan各项弱口令插件检测范围都很有限,能否自己加入其他需要检测的帐号或口令? A:在“X-Scan”内置的密码字典仅为简单示范,使用者如果希望软件有更强的密码猜解能力,可以自己编辑密码字典文件。 Q:为什么nasl脚本扫描结果存在大量英文,将来有有可能会对这些英文信息进行汉化? A:目前已有将近2000个NASL脚本,里面的描述信息大都是英文,需要翻译的内容可以在本站“焦点项目”的X-Scan下看到。欢迎大家一起帮忙翻译,通过审核后会直接加入在线升级库供大家下载。 Q:用xscan.exe在命令行方式下进行扫描时,如何暂停或终止扫描? A:命令行方式检测过程,按“[空格]”键可查看各线程状态及扫描进度,按“[回车]”可暂停或继续扫描,按“q”键可保存当前数据后提前退出程序,按“”强行关闭程序。 Q:位于dat目录下的wry.dll有什么用处? A:wry.dll是“追捕”软件的地址查询数据库,用于X-Scan文版查询物理地址并且得到了作者许可。在此对“追捕”软件作者及所有为建立此数据库作出贡献的朋友表示感谢。由于有考虑和将来“追捕”数据库的兼容问题,不能保证能正确使用以后版本的“追捕”数据库。在“追捕”数据库文件格式有改变的情况下,可以将新版本的数据库文件“wry.dll”拷贝到dat目录下替换旧版本文件,但建议在覆盖前备份旧文件。 Q:X-Scan如何安装,是否需要注册? A:X-Scan是完全免费软件,无需注册,无需安装(解压缩即可运行,自动安装WinPCap驱动)。 八. 版本发布: X-Scan v3.1 -- 发布日期:03/25/2004,修改“存活主机”插件,加入2.3版本SNMP、NETBIOS插件,优化主程序及NASL库。 X-Scan v3.02 -- 发布日期:03/08/2004,“WinPCap 3.1 beta”存在BUG,可能导致CheckHost.exe异常。X-Scan改用“WinPCap 2.3”,建议卸载“WinPCap 3.1 beta”后再使用X-Scan进行扫描。 X-Scan v3.0 -- 发布日期:03/01/2004,修正beta版本已知BUG,对主程序及所有插件进行优化,升级NASL库,支持2.0.10a版本以前的所有NASL脚本;提供简单的开发包方便其他朋友共同开发插件;其他插件正在开发。 感谢悟休、quack帮忙精选nasl脚本列表,感谢san为支持X-Scan项目编写相关页面程序。再次感谢安全焦点论坛上所有提供优秀思路和协助测试的朋友们。 X-Scan v3.0(beta) -- 发布日期:12/30/2003,对主程序结构进行调整,加入移植的NASL插件,支持2.0.9版本以前的所有NASL脚本;对插件接口做少量修改,方便由其他朋友共同开发插件;对远程操作系统识别功能进行了加强,并去掉了一些可由脚本完成的插件。 感谢isno和Enfis提供优秀插件,感谢悟休、quack帮忙精选nasl脚本列表,也感谢其他提供优秀思路和协助测试的朋友。 X-Scan v2.3 -- 发布日期:09/29/2002,新增SSL插件,用于检测SSL漏洞;升级PORT、HTTP、IIS插件;升级图形界面并对界面风格作细微调整。 感谢ilsy提供优秀插件。 X-Scan v2.2 -- 发布日期:09/12/2002,修正PORT插件线程同步BUG;修正RPC插件字符显示BUG;扩充RPC漏洞数据库;调整扫描结果索引文件风格。 感谢xundi、quack、stardust搜集并整理漏洞数据库。 X-Scan v2.1 -- 发布日期:09/08/2002,将SNMP插件扫描项目改为可选;将HTTP、IIS、RPC插件的“漏洞描述”链接到xundi整理的漏洞数据库;修正2.0以前版本已知BUG。 X-Scan v2.0 -- 发布日期:08/07/2002,新增路由信息检测、SNMP信息检测插件;升级NETBIOS插件,新增远程注册表信息检测;升级IIS插件,新增对IIS.ASP漏洞的检测;对插件接口做细微修改;更新图形界面,新增“在线升级”功能;扩充CGI漏洞数据库;修正1.3以前版本已知BUG。 感谢quack、stardust、sinister、ilsy、santa、bingle、casper提供宝贵资料或优秀插件,感谢san、xundi、e4gle协助测试,也感谢所有来信反馈和提出建议的热心朋友。 X-Scan v1.3 -- 发布日期:12/11/2001,修正PORT插件关于远程操作系统识别的BUG。 X-Scan v1.2 -- 发布日期:12/02/2001,升级HTTP、IIS插件,新增对HTTP重定向错误页面识别功能;升级PORT插件,在无法创建Raw Socket时改为使用标准TCP连接方式检测开放端口。 X-Scan v1.1 -- 发布日期:11/25/2001,将所有检测功能移入插件,使主程序完全成为“容器”;提供多语言支持;更新图形接口程序;修改多线程模式,所有插件共享最大线程数量,提高并发检测速度;新增SMTP、POP3弱口令用户检测;新增IIS UTF-Code漏洞检测;扩充CGI漏洞列表。 感谢xundi、quack、casper、wollf、黄承等朋友提供的宝贵资料,感谢echo、力立等朋友协助测试,再次向付出了重体力劳动的xundi和quack致谢,涕零..... X-Scan v1.0(beta) -- 发布日期:07/12/2001,新增对远程操作系统类型及版本识别功能;新增对远程主机地理位置查询功能;在“-iis”选项,新增对IIS “.ida/.idq”漏洞的扫描,同时更新漏洞描述;在“-port”参数,允许指定扫描的端口范围(通过修改“dat\config.ini”文件的“[PORT-LIST]\port=”);在“-ntpass”参数,允许用户在编辑密码字典时通过“%”通配所有用户名;更新CGI漏洞列表,并对CGI漏洞进行分类,以便根据远程主机系统类型扫描特定CGI漏洞,加快扫描速度。 感谢“天眼”软件作者--watercloud提供“被动识别远程操作系统”模块;感谢“追捕”软件作者--冯志宏提供“IP-地理位置”数据库;感谢quack提供漏洞资料、程序资料、无数有价值的建议还有感情和...... X-Scanner v0.61 -- 发布日期:05/17/2001,在“-iis”选项新增对IIS CGI文件名二次解码漏洞的检测。 X-Scanner v0.6 -- 发布日期:05/15/2001,新增“-iis”参数,专门用于扫描IIS服务器的“unicode”及“remote .printer overflow”漏洞;更新漏洞描述;调整CGI扫描的超时时间,尽量避免因超时导致的“扫描未完成”情况出现;为避免“RedV”插件被恶意利用,将自动更换主页功能改为自动向“C:\”目录上传包含警告信息的文本文件。 X-Scanner v0.5 -- 发布日期:04/30/2001,修改了命令行参数,使参数含义更加直观;扩充CGI漏洞数据库;对NT弱口令扫描功能进行扩充--允许用户使用用户名及密码字典;增加插件功能,并公布插件接口。 感谢“santa”和“老鬼(colossus)”提供插件。 X-Scanner v0.42b -- 发布日期:03/07/2001,修正了“-b”选项在特定情况导致系统overflow的BUG。 X-Scanner v0.42 -- 发布日期:03/02/2001,允许用户对SQL-SERVER帐户进行扩充,而不局限于扫描“sa”空口令。 X-Scanner v0.41 -- 发布日期:02/19/2001,修正了以前版本对FTP弱口令检测的BUG;重新优化代码,将xscan.exe与xscan98合二为一。 X-Scanner v0.4 -- 发布日期:02/15/2001,加入对SQL-SERVER默认“sa”帐户的扫描;在充分认识了某些人的惰性之后,临时制作了傻瓜式图形界面(一切操作按序号点击即可)。 X-Scanner v0.31 -- 发布日期:01/17/2001,对端口扫描方式和输出文件的格式做了细微调整;对Unicode解码漏洞进行了扩充;提供了for win98的版本和一个简单的CGI列表维护工具。 X-Scanner v0.3 -- 发布日期:12/27/2000,加入线程超时限制;增加代理功能;扩充CGI漏洞数据库,加入对Unicode解码等漏洞的检测及描述;修正内存泄露问题。内部测试版。 X-Scanner v0.2 -- 发布日期:12/12/2000,内部测试版。 九. 后序: X-Scan是一个完全免费软件,其的漏洞资料和整体功能都存在严重不足,各项功能的测试受时间及环境所限也不够全面。只有靠朋友们积极提供相关资料,或提出自己的建议及想法,才能把X-Scan做得更好。欢迎大家来信或访问我们的站点参与交流。 感谢安全焦点和uid0小组全体成员、前DarkSun部分成员的鼎力支持,同时也因个人资质问题向大家致歉。 --glacier_at_xfocus_dot_org _____________________________________________________________________ 使用过程如有问题、建议或发现错误请发邮件至:xscan_at_xfocus_dot_org 版权所有:安全焦点(http://www.xfocus.org)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值