使用自定义 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(除非,如前所述,您控制他附近的路由器并将响应重定向到您自己)。

PS:你也许可以发送UDP消息,但我没有尝试过。

答案3

如果您的本地网络接口有多个 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

您可以使用 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

再次运行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 次握手将失败,如所指出的这里

相关内容