Senden einer CURL-Anfrage mit benutzerdefinierter IP

19

Sollte es nicht möglich sein? Nehmen wir an, ich brauche keine Antwort, ich möchte nur eine Anfrage senden. Sollten wir nicht in der Lage sein, TCP / IP-Header zu ändern, weil unser Computer es sendet? Ich vermisse wahrscheinlich etwas, nur sehr neugierig, und erfahre davon in der Uni.

tmm
quelle

Antworten:

25

Sie können das -H/--headerArgument verwenden:

Sie könnten Ihre IP-Adresse fälschen:

curl --header "X-Forwarded-For: 192.168.0.2" http://example.com

Beispiel:
client

$ curl http://webhost.co.uk  

Web-Host

$ 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"

Client mit geänderter IP-Adresse

$ curl --header "X-Forwarded-For: 192.168.0.99" http://webhost.co.uk   

Web-Host

$ 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"  

Mann locken

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

Verweise:

Modify_method_and_headers

geedoubleya
quelle
1
Ich mag ändern Quell - IP denke ich, und es nicht zulassen , dass so weit wie ich kann ... sagen
TMM
Zu welchem ​​Protokoll? Ich habe ein reales Beispiel für die Änderung der Quell-IP-Adresse hinzugefügt, die sich in den Apache-Zugriffsprotokollen widerspiegelt.
Geedoubleya
2
http http http http
tmm
Hierdurch wird die IP-Adresse nicht geändert, die der Computer an die rohe TCP-Anfrage anhängt.
de Raad
3

Ich denke, die akzeptierte Antwort wird Ihnen nicht wirklich helfen, Ihre IP vollständig zu fälschen. Sie können Ihre Quell-IP nicht wirklich fälschen, es sei denn, Sie haben Zugriff auf Router in der Nähe des Zielcomputers.

TCP arbeitet mit einem 3-Wege-Handshake-Mechanismus. Sie können diesen Handshake nicht abschließen, da die Handshake-Antwort vom Zielcomputer an Ihre gefälschte IP-Adresse und nicht an Ihre eigene IP-Adresse gesendet wird (es sei denn, Sie steuern, wie bereits erwähnt, die in der Nähe befindlichen Router und leiten die Antwort an sich selbst weiter).

PS: Möglicherweise können Sie eine UDP-Nachricht senden, aber ich habe es nicht versucht.

looneyGod
quelle
Da in der ursprünglichen Frage gefragt wurde, wie dies geschehen soll curl, gehe ich davon aus, dass sie versuchen, auf eine HTTP-Ressource zuzugreifen. HTTP über UDP curlunterstützt weder AFAIK noch ist es zu diesem Zeitpunkt mehr als experimentell.
IvanGoneKrazy
1

Es ist möglich, die Quell-IP-Adresse zu ändern, wenn Ihre lokale Netzwerkschnittstelle mehrere IP-Adressen hat.

Angenommen, Sie haben einen Server mit 2 IP-Adressen 1.1.1.10und 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

Sie können Ihre aktuelle öffentliche IP-Adresse mit dem fantastischen Webservice ifconfig.co überprüfen :

$ curl -4 ifconfig.co
1.1.1.10

Um mit der anderen IP-Adresse ( ) auf den Webdienst ifconfig.co zuzugreifen 2.2.2.20, können Sie eine Route erstellen, die auf der IP-Adresse des Zielservers basiert. Verwenden Sie dig, um die Ziel-IP-Adressen aus den DNS- AEinträgen zu ermitteln:

$ dig ifconfig.co
...
ifconfig.co.            39      IN      A       104.28.18.94
ifconfig.co.            39      IN      A       104.28.19.94
...

Fügen Sie nun benutzerdefinierte Routen für diese IP-Adressen hinzu:

$ 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

Wenn Sie curl erneut ausführen, sehen Sie, dass Sie die andere Quell-IP-Adresse verwenden:

$ curl -4 ifconfig.co
2.2.2.20

Außerdem werden Ihre Routing-Informationen aktualisiert:

$ 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

Hinweis: Dies funktioniert nur, wenn die Quell-IP-Adresse in Ihren Server aufgelöst werden kann. Andernfalls schlägt der TCP-3-Wege-Handshake fehl, wie hier erläutert .

Pymkin
quelle