カスタムIPを使用してCURLリクエストを送信する

カスタムIPを使用してCURLリクエストを送信する

そうではありませんか?応答が必要なく、リクエストのみを送信したいとします。私たちのコンピュータが転送したので、tcp / ipヘッダを変更できるはずですか?おそらく私が何かを見逃しているようですが、大学でそれについて学びたかっただけです。

答え1

パラメータを使用できます-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:".

引用:

方法とタイトルの編集

答え2

私は受け入れた答えがあなたのIPをなりすましするのに本当に役に立たないと思います。ターゲットコンピュータに近いルーターにアクセスできない場合、ソースIPを実際になりすましません。

TCPは3方向ハンドシェイクメカニズムを使用します。ターゲットコンピュータのハンドシェイク応答が自分のIPではなくなりすましIPに送信されるため、このハンドシェイクを完了できません(前述のように、近くのルータを制御し、応答を自分のIPにリダイレクトしない限り)。

PS:UDPメッセージを送信することもできますが、試してみませんでした。

答え3

ローカルネットワークインターフェイスに複数のIPアドレスがある場合は、送信元IPアドレスを変更できます。

1.1.1.102つのIPアドレスと次のサーバーがあるとします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

Awesomeを使用して現在のパブリックIPアドレスを確認できますifconfig.coインターネットサービス:

$ curl -4 ifconfig.co
1.1.1.10

アクセスifconfig.coWebサービスは追加のIPアドレス(2.2.2.20)を使用し、ターゲットサーバーのIPアドレスに基づいてルートを作成できます。 digを使用してDNSレコードで宛先IPアドレスを見つけますA

$ 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

カールを再実行すると、別のソース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ウェイハンドシェイクは失敗します。ここ

関連情報