カスタムIPを使用したCURLリクエストの送信


19

それは可能ではないでしょうか?私は応答を必要としないと仮定しましょう、私はただ要求を送りたいだけです。コンピューターが送信するため、tcp / ipヘッダーを変更することはできませんか?私はおそらく何かを欠いている、本当に好奇心が強い、大学でそれについて学ぶ。

回答:


25

-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:".

参照:

modify_method_and_headers


1
思う私は、変更ソースIP Iにしたい、それが許可しない限り、私は言うことができるように...
TMM

どのプロトコルに?ソースIPアドレスの変更がApacheのアクセスログに反映される実世界の例を追加しました。
geedoubleya 14年

2
http http http http
tmm 14年

これは、マシンが生のTCPリクエストにアタッチしたIPを変更しません。
デラッド

3

受け入れられた答えは、IPをスプーフィングするのに本当に役立つとは思いません。ターゲットマシンの近くにあるルーターにアクセスできない限り、ソースIPを偽装することはできません。

TCPは3ウェイハンドシェイクメカニズムで動作します。ターゲットマシンからのハンドシェイク応答は、自分のものではなくスプーフィングされたIPに送信されるため、このハンドシェイクを完了することはできません(前述のように、近くのルーターを制御し、応答を自分の方にリダイレクトしない限り)。

PS:UDPメッセージを送信できるかもしれませんが、私は試していません。


元の質問ではこれをどのように行うかについて尋ねられたので、curl彼らは何らかのHTTPリソースにアクセスしようとしていると仮定しています。HTTP over UDPはcurlAFAIK をサポートするものでも、この時点で実験的なものでもありません。
IvanGoneKrazy

1

ローカルネットワークインターフェイスに複数の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ウェイハンドシェイクが失敗します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.