2012-09-13 90 views
5

我需要編寫一小段代碼來模擬來自不同源IP地址的流量,我想知道是否可以通過用Perl欺騙地址來完成?欺騙IP與Perl LWP

我試過的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(); 

回答

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-- 
+0

發送該文件是沒有問題的,它改變了請求的源IP。我在一個局域網上,並且我可以控制路由和監聽服務器,所以沒關係 – blackbird

+0

你說你已經可以用Net :: RAWIP做到這一點。 Net :: RAWIP唯一無法做到的就是格式化請求,並且我告訴你如何做到這一點。 – ikegami

+0

哦,這是爲RAWIP!讓我試試... – blackbird