2014-01-10 1 views
0

поэтому у меня есть этот фрагмент кода, от друга:Perl NET_RAWIP отправить шестнадцатеричный пакет

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; 

Bascially, что я хочу сделать, вместо отправки $ dnsdata в качестве данных в пакете, Я хочу отправить шестнадцатеричные данные/x53/x41/x4d/x50/x25/xdd/xaf/xd3/x61/x1e/x63

Как бы я это сделал? Благодаря!

+0

Могут быть шестнадцатеричные орфографические символы 'my $ encoded = join ('', map {sprintf ('/ x% 02x', ord $ _)} split ('', $ dnsdata)). Но вам действительно нужна спецификация или, по крайней мере, некоторые примеры того, как данные должны быть закодированы. – dwarring

ответ

0

Я предполагаю, что вы ищете это:

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

Это похоже на замечание Снупи исключением того, что раскол> присоединиться не приятно.

 Смежные вопросы

  • Нет связанных вопросов^_^