回答:
-H/--header
引数を使用できます:
IPアドレスをスプーフィングする可能性があります。
curl --header "X-Forwarded-For: 192.168.0.2" http://example.com
例:
クライアント
$ curl http://webhost.co.uk
ウェブホスト
$ 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"
IPアドレスが変更されたクライアント
$ curl --header "X-Forwarded-For: 192.168.0.99" http://webhost.co.uk
ウェブホスト
$ 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"
男のカール
-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:".
参照:
受け入れられた答えは、IPをスプーフィングするのに本当に役立つとは思いません。ターゲットマシンの近くにあるルーターにアクセスできない限り、ソースIPを偽装することはできません。
TCPは3ウェイハンドシェイクメカニズムで動作します。ターゲットマシンからのハンドシェイク応答は、自分のものではなくスプーフィングされたIPに送信されるため、このハンドシェイクを完了することはできません(前述のように、近くのルーターを制御し、応答を自分の方にリダイレクトしない限り)。
PS:UDPメッセージを送信できるかもしれませんが、私は試していません。
curl
彼らは何らかのHTTPリソースにアクセスしようとしていると仮定しています。HTTP over UDPはcurl
AFAIK をサポートするものでも、この時点で実験的なものでもありません。
ローカルネットワークインターフェイスに複数のIPアドレスがある場合、ソースIPアドレスを変更することができます。
2つのIPアドレスを持つサーバーがあり、1.1.1.10
かつ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
素晴らしいifconfig.co Webサービスを使用して、現在のパブリックIPアドレスを確認できます。
$ curl -4 ifconfig.co
1.1.1.10
他のIPアドレス()を使用してifconfig.co Webサービスにアクセスする2.2.2.20
には、ターゲットサーバーのIPアドレスに基づいてルートを作成できます。digを使用して、DNS A
レコードからターゲットIPアドレスを見つけます。
$ dig ifconfig.co
...
ifconfig.co. 39 IN A 104.28.18.94
ifconfig.co. 39 IN A 104.28.19.94
...
次に、これらのIPアドレスのカスタムルートを追加します。
$ 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
curlを再度実行すると、他のソースIPアドレスを使用していることがわかります。
$ curl -4 ifconfig.co
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
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
注:これは、ソースIPアドレスをサーバーに解決できる場合にのみ機能します。そうしないと、ここで指摘したように、TCP 3ウェイハンドシェイクが失敗します。