5

さまざまな送信元 IP アドレスからのトラフィックをシミュレートするための小さなコードを記述する必要がありますが、Perl でアドレスをスプーフィングすることでそれを実行できるかどうか疑問に思っています。

Net::RAWIP を試してみましたが、うまくいきましたが、より複雑な HTTP トラフィック (POST データ) を送信する必要があり、RAWIP では送信できませんでした。

LWP で ua->local_address を使用してみましたが、次の応答が返されました。

Can't connect to 10.x.x.x:8080

LWP::Protocol::http::Socket: Cannot assign requested address at /usr/lib/perl5/site_perl/5.10.0/LWP/Protocol/http.pm line 51.

これは私が使用しているコードです:

#!/usr/bin/perl -w

use strict ;
use warnings ;
use LWP::UserAgent ;
use URI::URL ;

my $path = 'http://142.133.114.130:8080' ;
my $url = new URI::URL $path;
my $ua       = LWP::UserAgent->new();

$ua->local_address('10.121.132.112');
$ua->env_proxy ;
my $effing = 'blaj.jpg' ;
my $response = $ua->post( $url,
                        'Content-Type' => "multipart/form-data",
                        'Content' => [ userfile => ["$effing" ]],
                        'Connection' => 'keep-alive' ) ;
print $response->decoded_content();
4

1 に答える 1

2

自分以外のアドレスから送信した場合、返信を受け取ることができません。つまり、できることはリクエストを送信することだけです。送信できることを示したので、必要なのは送信要求だけです。簡単だ。

use strict;
use warnings;

use HTTP::Request::Common qw( POST );

my $req = POST('http://www.example.org/',
   'Content-Type' => "multipart/form-data",
   'Content'      => [ userfile => [ $0 ]],
   'Connection'   => 'keep-alive',
);

print $req->as_string();

出力:

POST http://www.example.org/
Connection: keep-alive
Content-Length: 376
Content-Type: multipart/form-data; boundary=xYzZY

--xYzZY
Content-Disposition: form-data; name="userfile"; filename="x.pl"
Content-Type: text/plain

use strict;
use warnings;

use HTTP::Request::Common qw( POST );

my $req = POST('http://www.example.org/',
   'Content-Type' => "multipart/form-data",
   'Content'      => [ userfile => [ $0 ]],
   'Connection'   => 'keep-alive',
);

print $req->as_string();

--xYzZY--
于 2012-09-13T17:40:32.913 に答える