2009-07-25 29 views
21

Điều này chỉ cần làm việc trên một mạng con duy nhất và không phải để sử dụng độc hại.Giả mạo địa chỉ IP khởi tạo của một yêu cầu HTTP

Tôi có công cụ kiểm tra tải được viết bằng Python về cơ bản sẽ kích hoạt yêu cầu HTTP tại URL. Tôi cần chạy các thử nghiệm hiệu suất dựa trên cân bằng tải trên nền IP, vì vậy các yêu cầu phải đến từ một dải IP. Hầu hết các công cụ hiệu suất thương mại đều cung cấp chức năng này, nhưng tôi muốn tự xây dựng nó.

Công cụ sử dụng urllib2 của Python để vận chuyển. Có thể gửi yêu cầu HTTP với địa chỉ IP giả mạo cho các gói tạo yêu cầu không?

+0

hmm .. là một trong những câu trả lời bên dưới nói .. làm thế nào một sự bắt tay TCP sẽ xảy ra nếu ip khởi tạo bị giả mạo? bạn sẽ chạy loại thiết lập mạng nào cho mô phỏng như vậy? –

Trả lời

5

Bạn muốn đặt địa chỉ nguồn được sử dụng cho kết nối. Googling "địa chỉ nguồn urllib2" cung cấp cho http://bugs.python.org/file9988/urllib2_util.py. Tôi không thử nó.

Hệ thống bạn đang chạy cần được định cấu hình với IP bạn đang thử nghiệm.

+0

Đây là phương pháp phù hợp - cung cấp cho hộp kiểm tra của bạn nhiều IP và tạo chu kỳ ứng dụng thử nghiệm thông qua chúng vì nó tạo ra các kết nối. – caf

5

lưu ý nhanh, như tôi vừa học được ngày hôm qua này:

Tôi nghĩ rằng bạn đã ngụ ý bạn biết điều này đã có, nhưng bất kỳ phản ứng với một yêu cầu HTTP đến địa chỉ IP mà xuất hiện trong tiêu đề. Vì vậy, nếu bạn muốn xem những phản hồi đó, bạn cần phải có quyền kiểm soát bộ định tuyến và thiết lập bộ định tuyến để các IP giả mạo được định tuyến trở lại IP mà bạn đang sử dụng để xem các phản hồi.

43

Đây là sự hiểu lầm của HTTP. Giao thức HTTP dựa trên TCP. Giao thức TCP dựa trên một cái bắt tay 3 cách để khởi tạo các yêu cầu.

alt text http://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png

Không cần phải nói, nếu bạn giả mạo có nguồn gốc địa chỉ IP của bạn, bạn sẽ không bao giờ vượt qua giai đoạn đồng bộ và không có thông tin HTTP sẽ được gửi (máy chủ không thể gửi nó đến một máy chủ hợp pháp).

Nếu bạn cần kiểm tra bộ cân bằng tải IP, đây không phải là cách để thực hiện.

+0

điểm tốt.không có đầu mối làm thế nào bắt tay tcp sẽ xảy ra nếu các gói tạo nên các phân đoạn tcp đó có các tiêu đề ip giả. nhận được off-topic, nhưng làm thế nào bạn sẽ thực hiện một mạng/chương trình để kiểm tra và IP LB? và các công cụ như LoadRunner làm điều này như thế nào? –

+8

Tôi không biết LoadRunner là gì, nhưng tôi đoán là họ sử dụng NAT yêu cầu truy cập cấp thấp vào các gói dữ liệu thô để ghi lại các gói nguồn đến và các gói đích đi khi đang di chuyển. Để làm điều này, bạn có thể phải cài đặt PCAP http://en.wikipedia.org/wiki/Pcap. Nhưng tôi cảnh báo bạn, nó không phải là dễ dàng như sử dụng urllib2. Trên một mặt lưu ý, nó cũng buồn cười để xem có bao nhiêu người ở đây không có đầu mối những gì họ đang nói về và tôi đã được downvoted hai lần. – Unknown

+0

Tôi đoán rằng nhiều người lập trình không có đầu mối về cách mạng hoạt động ở mức thấp hơn, đừng lo lắng về nó. – Gert

1

Bạn chỉ có thể sử dụng bí danh IP trên hộp Linux và thiết lập bao nhiêu địa chỉ IP tùy ý. Điều bắt buộc là bạn không thể dự đoán IP nào sẽ được đóng dấu trong tiêu đề IP trừ khi bạn đặt nó vào một mạng khác và đặt tuyến đường rõ ràng cho mạng đó. tức là -

current client address on eth0 = 192.168.1.10/24 

server-side: 
ifconfig eth0:1 172.16.1.1 netmask 255.255.255.0 

client-side: 
ifconfig eth0:1 172.16.1.2 netmask 255.255.255.0 
route add -net 172.16.1.0/24 gw 172.16.1.1 metric 0 

Lặp lại cho bao nhiêu mạng con tùy thích. Khởi động lại apache để đặt người nghe trên tất cả các giao diện bí danh mới và bạn tắt và chạy.

1

Tôi khuyên bạn nên xem liệu bạn có thể định cấu hình cân bằng tải của mình để đưa ra quyết định dựa trên tiêu đề X-Forwarded-For hay không, thay vì IP nguồn của gói chứa yêu cầu HTTP. Tôi biết rằng hầu hết các cân bằng tải trọng thương mại đáng kể đều có khả năng này.

Nếu bạn không thể làm điều đó, tôi khuyên bạn có thể cần phải cấu hình một hộp Linux với toàn bộ đống IP thứ cấp - đừng bận tâm cấu hình các tuyến tĩnh trên LB, chỉ cần đặt hộp linux của bạn làm mặc định cổng của thiết bị LB.

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