Invio richiesta CURL con IP personalizzato


19

Non dovrebbe essere possibile? Supponiamo che non ho bisogno di una risposta, voglio solo inviare una richiesta. Non dovremmo essere in grado di modificare le intestazioni di tcp / ip, perché il nostro computer lo invia? Probabilmente mi manca qualcosa, davvero curioso, che lo sto imparando nell'università.

Risposte:


25

Puoi usare l' -H/--headerargomento:

Potresti falsificare il tuo indirizzo IP:

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

Esempio:
client

$ curl http://webhost.co.uk  

host web

$ 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 con indirizzo IP modificato

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

host web

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

uomo arricciato

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

Riferimenti:

Modify_method_and_headers


1
Voglio cambiare l'IP di origine penso, e questo non lo consente, per quanto ne so ...
tmm,

A quale protocollo? Ho aggiunto un esempio reale del cambiamento dell'indirizzo IP di origine che si riflette nei log di accesso di Apache.
geedoubleya,

2
http http http http
tmm

Ciò non cambierà l'IP che la macchina vede allegato alla richiesta TCP non elaborata.
de Raad,

3

Penso che la risposta accettata non ti aiuterà davvero a falsificare il tuo IP fino in fondo. Non puoi davvero falsificare il tuo IP di origine se non hai accesso ai router vicino al computer di destinazione.

TCP funziona su un meccanismo di handshake a 3 vie. Non sarai in grado di completare questa stretta di mano poiché la risposta della stretta di mano dalla macchina target andrà al tuo IP contraffatto e non al tuo (a meno che, come detto prima, controlli i suoi router vicini e reindirizzi la risposta verso te stesso).

PS: potresti essere in grado di inviare un messaggio UDP, ma non l'ho provato.


Dal momento che la domanda originale si chiedeva come sarebbe stato fatto curl, suppongo che stiano cercando di accedere ad alcune risorse HTTP. HTTP su UDP non è qualcosa che curlsupporta AFAIK né è qualcosa di oltre sperimentale a questo punto.
IvanGoneKrazy il

1

È possibile modificare l'indirizzo IP di origine, se l'interfaccia di rete locale ha più indirizzi IP.

Supponiamo di avere un server con 2 indirizzi IP 1.1.1.10e 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

Puoi verificare il tuo attuale indirizzo IP pubblico con il fantastico servizio web ifconfig.co :

$ curl -4 ifconfig.co
1.1.1.10

Per accedere al servizio web ifconfig.co utilizzando l'altro indirizzo IP ( 2.2.2.20), è possibile creare una route in base all'indirizzo IP del server di destinazione. Utilizzare dig per trovare gli indirizzi IP di destinazione dai Arecord DNS :

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

Ora aggiungi percorsi personalizzati per questi indirizzi 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

Eseguendo nuovamente il ricciolo, vedi che stai utilizzando l'altro indirizzo IP di origine:

$ curl -4 ifconfig.co
2.2.2.20

Inoltre, le informazioni di routing vengono aggiornate:

$ 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

Nota: questo funziona solo se l'indirizzo IP di origine può essere risolto sul tuo server, altrimenti l'handshake a 3 vie TCP fallirà, come indicato qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.