工具脚本(网络编码)

简介:

生成结构体网络编码的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";

        }
}
复制代码
相关文章
|
2天前
|
存储 安全 物联网
浅析Kismet:无线网络监测与分析工具
Kismet是一款开源的无线网络监测和入侵检测系统(IDS),支持Wi-Fi、Bluetooth、ZigBee等协议,具备被动监听、实时数据分析、地理定位等功能。广泛应用于安全审计、网络优化和频谱管理。本文介绍其安装配置、基本操作及高级应用技巧,帮助用户掌握这一强大的无线网络安全工具。
24 9
浅析Kismet:无线网络监测与分析工具
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
72 32
|
25天前
|
机器学习/深度学习 Serverless 索引
分类网络中one-hot编码的作用
在分类任务中,使用神经网络时,通常需要将类别标签转换为一种合适的输入格式。这时候,one-hot编码(one-hot encoding)是一种常见且有效的方法。one-hot编码将类别标签表示为向量形式,其中只有一个元素为1,其他元素为0。
28 2
|
1月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。ACL 可应用于路由器、防火墙等设备,通过设定规则控制访问。其类型包括标准、扩展、基于时间和基于用户的ACL,广泛用于企业网络和互联网安全中,以增强安全性、实现精细管理和灵活调整。然而,ACL 也存在管理复杂和可能影响性能的局限性。未来,ACL 将趋向智能化和自动化,与其他安全技术结合,提供更全面的安全保障。
101 4
|
1月前
|
存储 网络协议 定位技术
OSPF路由汇总:优化网络的强大工具
OSPF路由汇总:优化网络的强大工具
65 1
|
1月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
148 5
|
2月前
|
网络协议 安全 Linux
网络工具ping的使用方式
【10月更文挑战第19天】网络工具ping的使用方式
123 6
|
3月前
|
存储 JSON Ubuntu
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
|
4月前
|
存储 Linux Shell
在Linux中,如何使用脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些?能ping 通则 认为在线。
在Linux中,如何使用脚本,实现判断 192.168.1.0/24 网络里,当前在线的 IP 有哪些?能ping 通则 认为在线。
|
4月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?

热门文章

最新文章