工具脚本(网络编码)

简介:

生成结构体网络编码的perl脚本(使用google protocal更为通用):

复制代码
#! /usr/bin/perl -w
## Copyright (C) 2011 by zhenjing

# usage : proto_hfile proto

my $classmane = "--@@@@--"; 

for(@ARGV)
{
    my $in = $_;
    if(not defined $in)  
    {
        die "Usage : $0 filename ";
    }

    my $out = $in;
    $out =~ s/(\.\w+)?$/.h/;   # change suffix name
 
    rename $in, $in.".proto";        # rename old file, use old name for new file
    $in .= ".proto";             

    unless (open IN,"<$in") 
    {
        die "Can't open file($in): $!";
    }
    unless(open OUT, ">$out")
    {
        die "Can't open file($out): $!";
    }

    print OUT "#include <stdint.h>\n";

    while(<IN>)
    {
        if( /struct\s+(\w+)/ || /class\s+(\w+)/ ) 
        {
            $classmane = $1;

            print OUT $_;
            next;
        }

        if( /}\s*;/ )      
        {
            &AddFuncDef($classmane);
            print OUT $_;
            next;
        }
        print OUT $_;
    }
}

sub AddFuncDef
{
    print OUT "\n";
    print OUT "\t$_[0]();\n";
    print OUT "\tvoid Hton();\n";
    print OUT "\tvoid Ntoh();\n";
    
    print OUT "\n\tvoid Print() const;\n";
    print OUT "\n";
}
复制代码

 

复制代码
#! /usr/bin/perl -w
## Copyright (C) 2011 by zhenjing

# usage : proto_cpp proto

# @ not support "long int"


my $classmane = "--@@@@--"; 
my $prifix = "::";

my @varShort = ();
my @varInt = ();
my @varLong = ();

for(@ARGV)
{
    my $in = $_;
    if(not defined $in)  
    {
        die "Usage : $0 filename ";
    }

    my $out = $in;
    $out =~ s/(\.\w+)?$/.cpp/;   # change suffix name

    # rename $in, $in.".proto";        # rename old file, use old name for new file
    # $in .= ".proto";           
    
    unless (-e $in) 
    {
        $in .= ".proto";   # use together with proto_hfile
    }

    unless (open IN,"<$in") 
    {
        die "Can't open file($in): $!";
    }
    unless(open OUT, ">$out")
    {
        die "Can't open file($out): $!";
    }

    print OUT "#include \"$in\"\n\n";
    print OUT "#include <stdio.h>\n";
    print OUT "#include <string.h>\n";
    print OUT "#include <arpa/inet.h>\n\n";

    while(<IN>)
    {
        if( /struct\s+(\w+)/ || /class\s+(\w+)/ ) 
        {
            $classmane = $1;

            next;
        }

        if( /}\s*;/ )      
        {
            &AddConstructFun;
            &AddNtohFunc;
            &AddHtonFunc;
            &AddPrintFun;
            &CleanVar;
            next;
        }
        
        if( /short\s+(\w+)/ || /int16_t\s+(\w+)/ || /uint16_t\s+(\w+)/ ) 
        {
            push @varShort, $1;
            next;
        } 
        if( /int\s+(\w+)/ || /int32_t\s+(\w+)/ || /uint32_t\s+(\w+)/ ) 
        {
            push @varInt, $1;
            next;
        }
        if( /long\s+long\s+(\w+)/ || /int64_t\s+(\w+)/ || /uint64_t\s+(\w+)/ ) 
        {
            push @varLong, $1;
            next;
        } 
        if( /long\s+(\w+)/ ) 
        {
            push @varLong, $1;
            next;
        }
    }
}

sub AddConstructFun
{
    print OUT "$classmane${prifix}$classmane()\n";
    print OUT "{\n";
 
    print OUT "\tmemset(this, 0, sizeof($classmane));\n";
    print OUT "}\n\n";
}

sub AddHtonFunc
{
    print OUT "void $classmane${prifix}Hton()\n";
    print OUT "{\n";
 
    foreach (@varShort) {
        print OUT "\t$_ = htons($_);\n";
    }  
    foreach (@varInt) {
        print OUT "\t$_ = htonl($_);\n";
    } 
    foreach (@varLong) {
        print OUT "\t$_ = htonll($_);\n";
    } 

    print OUT "}\n\n";
}

sub AddNtohFunc
{
    print OUT "void $classmane${prifix}Ntoh()\n";
    print OUT "{\n";
 
    foreach (@varShort) {
        print OUT "\t$_ = ntohs($_);\n";
    }  
    foreach (@varInt) {
        print OUT "\t$_ = ntohl($_);\n";
    } 
    foreach (@varLong) {
        print OUT "\t$_ = ntohll($_);\n";
    } 

    print OUT "}\n\n";
}

sub AddPrintFun
{
    print OUT "void $classmane${prifix}Print() const\n";
    print OUT "{\n\n";
 
    print OUT "}\n\n";
}


sub CleanVar
{
    @varShort = ();
    @varInt = ();
    @varLong = ();
}
复制代码

 

复制代码
#! /bin/bash
## Copyright (C) 2011 by zhenjing

# usage : net_proto proto

if [[ $# -lt 1 ]]
then
    echo "$0 proto_files ..."
fi

/data/home/nolan/bin/proto_hfile $@;
/data/home/nolan/bin/proto_cpp $@;
复制代码

 

正则表达式测试脚本:

复制代码
#! /usr/bin/perl -w
## Copyright (C) 2007 by zhenjing

# $PATTERN = "fred.*wilma|wilma.*fred";
# $PATTERN = "\\b\\w*a\\b";                 #注意在字符串中,\为转义字符,\\才表示反斜线
# $PATTERN = "(fred|bar){3}"; 
# $PATTERN = "class\\s+(\\w+)\$"; 
# $PATTERN = "\\s*(\\w+\\s+)"; 
# $PATTERN = "\\w+\\s+(\\w|:)+\\s*\\(";
$PATTERN = "class\\s+\\w+\\s*:\\s*public";    #class *** : public ***

while(<>)
{
        chomp;
        if(/$PATTERN/)
        {
                print "Matched: |$`<$&>$'|\n";
        }
        else
        {
                print "NO matched: |$_|\n";

        }
}
复制代码
相关文章
|
7月前
|
安全 网络协议 算法
Nmap网络扫描工具详细使用教程
Nmap 是一款强大的网络发现与安全审计工具,具备主机发现、端口扫描、服务识别、操作系统检测及脚本扩展等功能。它支持多种扫描技术,如 SYN 扫描、ARP 扫描和全端口扫描,并可通过内置脚本(NSE)进行漏洞检测与服务深度枚举。Nmap 还提供防火墙规避与流量伪装能力,适用于网络管理、渗透测试和安全研究。
1083 1
|
8月前
|
Web App开发 API 虚拟化
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
515 15
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
|
9月前
|
监控 安全 网络安全
网络安全工具及其使用方法:保护数字安全的第一道防线
在信息时代,网络攻击变得日益复杂且频繁,保护个人和企业数据安全的重要性日益凸显。幸运的是,各种网络安全工具为用户提供了有效的防护手段。从防火墙到密码管理器,这些工具覆盖了威胁检测、攻击防御和数据保护的方方面面。本文将介绍几款常用的网络安全工具,并提供其使用方法,以帮助您构建强大的网络安全防线。
298 1
|
9月前
|
监控 数据可视化 Java
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
192 0
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
|
10月前
|
运维 监控 Linux
网络延迟监测工具选择(第一篇)
**WGCLOUD**是一款开源免费的跨平台运维监控工具,支持Windows、Linux、MacOS等系统,具备网络延迟监测功能。其内置的**PING监测**模块可实时ping目标IP,图形化展示延迟趋势,并在目标IP不可达时发送告警通知。支持分组管理,操作简单便捷,适合运维人员高效监控网络状态。
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
686 62
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
348 7
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
539 9
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
2904 28
|
安全 Linux 网络安全
利用Python脚本自动备份网络设备配置
通过本文的介绍,我们了解了如何利用Python脚本自动备份网络设备配置。该脚本使用 `paramiko`库通过SSH连接到设备,获取并保存配置文件。通过定时任务调度,可以实现定期自动备份,确保网络设备配置的安全和可用。希望这些内容能够帮助你在实际工作中实现网络设备的自动化备份。
680 14
下一篇
开通oss服务