Câu trả lời:
Bạn có thể sử dụng -H/--header
đối số:
Bạn có thể giả mạo địa chỉ IP của bạn:
curl --header "X-Forwarded-For: 192.168.0.2" http://example.com
Ví dụ:
khách hàng
$ curl http://webhost.co.uk
máy chủ web
$ tailf access.log | grep 192.168.0.54
192.168.0.54 - - [10/Nov/2014:15:56:09 +0000] "GET / HTTP/1.1" 200 14328 "-"
"curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3
libidn/1.18 libssh2/1.4.2"
khách hàng có địa chỉ IP đã thay đổi
$ curl --header "X-Forwarded-For: 192.168.0.99" http://webhost.co.uk
máy chủ web
$ tailf access.log | grep 192.168.0.99
192.168.0.99 - - [10/Nov/2014:15:56:43 +0000] "GET / HTTP/1.1" 200
14328 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0
zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
người đàn ông cuộn tròn
-H/--header <header>
(HTTP) Extra header to use when getting a web page. You may
specify any number of extra headers. Note that if you should add
a custom header that has the same name as one of the internal
ones curl would use, your externally set header will be used
instead of the internal one. This allows you to make even
trickier stuff than curl would normally do. You should not
replace internally set headers without knowing perfectly well
what you’re doing. Remove an internal header by giving a
replacement without content on the right side of the colon,
as in: -H "Host:".
Tài liệu tham khảo:
Tôi nghĩ rằng câu trả lời được chấp nhận sẽ không thực sự giúp bạn giả mạo IP của mình mọi cách. Bạn thực sự không thể giả mạo IP nguồn của mình trừ khi bạn có quyền truy cập vào các bộ định tuyến gần với máy đích.
TCP hoạt động trên cơ chế bắt tay 3 chiều. Bạn sẽ không thể hoàn thành cái bắt tay này vì phản hồi bắt tay từ máy mục tiêu sẽ chuyển đến IP giả mạo của bạn chứ không phải của riêng bạn (trừ khi, như đã nói trước đó, bạn điều khiển các bộ định tuyến gần đó và chuyển hướng phản hồi về phía mình).
PS: Bạn có thể gửi tin nhắn UDP, nhưng tôi chưa thử.
curl
, tôi cho rằng họ đang cố gắng truy cập một số tài nguyên HTTP. HTTP qua UDP không phải là thứ gì đó curl
hỗ trợ AFAIK cũng không phải là thứ gì đó vượt quá thử nghiệm vào thời điểm này.
Có thể thay đổi địa chỉ IP nguồn, nếu giao diện mạng cục bộ của bạn có nhiều địa chỉ IP.
Giả sử bạn có một máy chủ có 2 địa chỉ IP 1.1.1.10
và 2.2.2.20
:
$ ip route
default via 1.1.1.193 dev eth0
1.1.1.192/27 via 1.1.1.193 dev eth0
1.1.1.192/27 dev eth0 proto kernel scope link src 1.1.1.10
2.2.2.20 via 2.2.2.20 dev eth0 scope link
Bạn có thể xác minh địa chỉ IP công cộng hiện tại của mình bằng dịch vụ web ifconfig.co tuyệt vời :
$ curl -4 ifconfig.co
1.1.1.10
Để truy cập dịch vụ web ifconfig.co bằng địa chỉ IP khác ( 2.2.2.20
), bạn có thể tạo tuyến dựa trên địa chỉ IP của máy chủ đích. Sử dụng đào để tìm địa chỉ IP mục tiêu từ các A
bản ghi DNS :
$ dig ifconfig.co
...
ifconfig.co. 39 IN A 104.28.18.94
ifconfig.co. 39 IN A 104.28.19.94
...
Bây giờ thêm các tuyến tùy chỉnh cho các địa chỉ IP này:
$ ip route add 104.28.18.94/32 via 1.1.1.193 dev eth0 src 2.2.2.20
$ ip route add 104.28.19.94/32 via 1.1.1.193 dev eth0 src 2.2.2.20
Chạy lại curl, bạn thấy rằng bạn đang sử dụng địa chỉ IP nguồn khác:
$ curl -4 ifconfig.co
2.2.2.20
Ngoài ra, thông tin định tuyến của bạn được cập nhật:
$ ip route
default via 1.1.1.193 dev eth0
1.1.1.192/27 via 1.1.1.193 dev eth0
1.1.1.192/27 dev eth0 proto kernel scope link src 1.1.1.10
2.2.2.20 via 2.2.2.20 dev eth0 scope link
104.28.18.94 via 1.1.1.193 dev eth0 src 2.2.2.20
104.28.19.94 via 1.1.1.193 dev eth0 src 2.2.2.20
Lưu ý: điều này chỉ hoạt động nếu địa chỉ IP nguồn có thể được phân giải đến máy chủ của bạn, nếu không, bắt tay 3 bước TCP sẽ thất bại, như được chỉ ra ở đây .