【问题标题】:Perl NET_RAWIP send Hexadecimal packetPerl NET_RAWIP 发送十六进制数据包
【发布时间】:2014-01-11 07:06:49
【问题描述】:

所以我有这个代码 sn-p,来自朋友:

    

my $dnspacket = new Net::DNS::Packet($str, "A", "IN");
    my $dnsdata = $dnspacket->data;
    my $sock = new Net::RawIP({udp=>{}});
    $str = @name[int rand($names)];
    $reflector = $nameservers[int rand($reflectors)];          
    $sock->set({ip => {
                saddr => "127.0.0.1", daddr => "$r", frag_off=>0,tos=>0,id=>1565},
                udp => {source => 53,
                dest => 53, data=>$dnsdata
                } });
    $sock->send;

基本上我想做的不是发送 $dnsdata 作为数据包中的数据,而是发送十六进制数据 /x53/x41/x4d/x50/x25/xdd/xaf/xd3/x61/x1e /x63

我该怎么做呢?谢谢!

【问题讨论】:

  • 可能是十六进制字符条例my $encoded = join('', map{sprintf('/x%02x', ord $_)} split('', $dnsdata))。但是你真的需要一个规范,或者至少一些关于数据应该如何编码的例子。

标签: perl packet


【解决方案1】:

我猜你正在寻找这个:

$dnsdata =~ s!([\s\S])! sprintf("/%02x",ord($1)) !eg;

这类似于 snoopy 的评论,只是 split>join 不好。

【讨论】:

    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多