2012-09-13 31 views
5

Tôi cần viết một đoạn mã nhỏ để mô phỏng lưu lượng truy cập từ các địa chỉ IP nguồn khác nhau và tôi tự hỏi liệu điều đó có thể được thực hiện bằng cách giả mạo địa chỉ với Perl không?IP giả mạo với Perl LWP

tôi đã cố gắng Net :: RAWIP và hoạt động tốt, nhưng tôi cần phải gửi một số lưu lượng HTTP phức tạp hơn (cụ thể là dữ liệu POST) và không thể làm như vậy với RAWIP

Với LWP Tôi đã cố gắng sử dụng UA-> local_address nhưng tôi nhận được câu trả lời này:

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. 

Đây là mã tôi đang sử dụng:

#!/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(); 

Trả lời

2

bạn không thể có được một câu trả lời nếu bạn gửi từ một địa chỉ không phải của bạn. Điều đó có nghĩa là tất cả những gì bạn có thể làm là gửi yêu cầu. Bạn đã cho biết bạn có thể thực hiện việc gửi, vì vậy tất cả những gì bạn cần là yêu cầu gửi. Thật dễ dàng.

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(); 

Output:

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

Gửi tập tin được không phải là một vấn đề, nó thay đổi IP nguồn của yêu cầu. Tôi đang ở trên mạng LAN và tôi có quyền kiểm soát các tuyến đường và máy chủ nghe vì vậy đó là ok – blackbird

+0

Bạn đã nói rằng bạn đã có thể thực hiện điều đó với Net :: RAWIP. Điều duy nhất bạn không thể làm với Net :: RAWIP là định dạng yêu cầu và tôi đã chỉ cho bạn cách thực hiện điều đó. – ikegami

+0

Điều này là dành cho RAWIP! hãy để tôi thử ... – blackbird

Các vấn đề liên quan