2014-01-10 2 views
0

У меня есть этот код для отправки пакета на PHP, и я хотел бы знать, как это сделать в perl, я попытался отправить через шестнадцатеричные данные, но он не работает. Вот код PHP:PHP отправить пакет в perl

$sIPAddr = "37.221.175.211";               
$iPort = 7777;                
$sPacket = "";                 
$aIPAddr = explode('.', $sIPAddr);            

$sPacket .= "SAMP";               

$sPacket .= chr($aIPAddr[0]);             
$sPacket .= chr($aIPAddr[1]);             
$sPacket .= chr($aIPAddr[2]);             
$sPacket .= chr($aIPAddr[3]);             

$sPacket .= chr($iPort & 0xFF);            
$sPacket .= chr($iPort >> 8 & 0xFF);           

$sPacket .= 'c';                


$rSocket = fsockopen('udp://'.$sIPAddr, $iPort, $iError, $sError, 2);   
fwrite($rSocket, $sPacket); 

fclose($rSocket); 

Как я могу сделать это в Perl? Я также хочу использовать raw-сокет, чтобы отправить его.

Это то, что я пытался, но сервер не отвечает на него, что заставляет меня думать, что данные повреждены где-то:

$packet = Net::RawIP->new({ 
         ip => { 
           saddr => $saddr, 
           daddr => $dest, 
           }, 

         udp => { 
           source => $rsport, 
           dest => $port, 
           data => "\x53\x41\x4d\x50\x25\xdd\xaf\xd3\x61\x1e\x63", # this is the data from the PHP file in HEX 
           }, 
         }); 
    $packet->send; 
+0

Пожалуйста, покажите нам, что вы пробовали до сих пор. Вы сказали, что пытались отправить шестнадцатеричные данные. Вы делали это в Perl? Пожалуйста, отредактируйте свой вопрос, и давайте посмотрим код и объясним **, как ** он не работает. Также проверьте [ask]. – simbabque

+0

@simbabque Извините, что, сделано! – user3180103

+0

Комментарии в Perl: '#', а не '//'. Пожалуйста, не издевайтесь над кодом здесь, а отправляйте реальный код. Удалите вещи, которые вам не нравятся, чтобы посмотреть, но попытайтесь скомпилировать их. – simbabque

ответ

1

Не знаю Net::RawIP, но вот вариант Perl, который отправляет тот же самый пакет, что и ваш PHP-код, используя модуль IO::Socket::INET. Для документов для этого см. https://metacpan.org/pod/IO::Socket::INET

use strict; 
use warnings; 
use IO::Socket; 

my $sIPAddr = '37.221.175.211'; 
my $iPort = 7777; 
my $sPacket = 'SAMP' . join('', map chr, 
    split(/\./, $sIPAddr), 
    $iPort & 0xFF, 
    $iPort >> 8 & 0xFF, 
) . 'c'; 

my $sock = IO::Socket::INET->new(
    Proto => 'udp', 
    PeerPort => $iPort, 
    PeerAddr => $sIPAddr, 
) or die "Could not create socket: $!\n"; 

$sock->send($sPacket); 
Смежные вопросы