使用自定义IP发送CURL请求


19

不可能吗?假设我不需要响应,我只想发送一个请求。我们不是应该能够更改tcp / ip标头,因为我们的计算机会发送它吗?我可能会错过一些东西,只是真的很好奇,我正在大学里学习它。

Answers:


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,就我所知,它不允许这样做……
tmm 2014年

遵循哪个协议?我添加了一个真实的示例,该示例说明了源IP地址更改已反映在apache访问日志中。
geedoubleya 2014年

2
http http http http
tmm 2014年

这不会更改机器看到的附加到原始TCP请求的IP。
de Raad

3

我认为接受的答案并不能真正帮助您一路欺骗IP。除非您有权访问目标计算机附近的路由器,否则您无法真正欺骗源IP。

TCP在3向握手机制上工作。您将无法完成此握手,因为来自目标计算机的握手响应将转到您的欺骗IP,而不是您自己的IP(除非如前所述,您控制他附近的路由器并将响应重定向到您自己)。

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


由于最初的问题是关于如何实现的curl,我假设他们正在尝试访问一些HTTP资源。UDP上的HTTP尚不curl支持AFAIK,目前还不能进行实验。
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向握手将失败,如此处所述

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.