Perl NET_RAWIP发送十六进制数据包

时间:2014-01-10 02:22:41

标签: perl packet

所以我有一个来自朋友的代码片段:

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

我该怎么做呢?谢谢!

1 个答案:

答案 0 :(得分:0)

我猜你正在寻找这个:

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

这类似于snoopy的评论,除了分割> join不是很好。