Envoi d'une demande CURL avec une adresse IP personnalisée

19

Cela ne devrait-il pas être possible? Supposons que je n'ai pas besoin de réponse, je veux simplement envoyer une demande. Ne devrions-nous pas être en mesure de modifier les en-têtes TCP / IP, car notre ordinateur les envoie? Il me manque probablement quelque chose, vraiment curieux, en apprenant à ce sujet à l'université.

tmm
la source

Réponses:

25

Vous pouvez utiliser l' -H/--headerargument:

Vous pouvez usurper votre adresse IP:

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

Exemple:
client

$ curl http://webhost.co.uk  

hébergeur

$ 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 avec l'adresse IP changé

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

hébergeur

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

homme curl

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

Les références:

Modify_method_and_headers

geedoubleya
la source
1
Je veux changer l'adresse IP source, je pense, et cela ne le permet pas pour autant que je
sache
À quel protocole? J'ai ajouté un exemple réel du changement d'adresse IP source reflété dans les journaux d'accès Apache.
geedoubleya
2
http http http http
tmm
Cela ne changera pas l'IP que la machine voit attachée à la requête TCP brute.
de Raad
3

Je pense que la réponse acceptée ne vous aidera pas vraiment à usurper complètement votre adresse IP. Vous ne pouvez pas vraiment usurper votre IP source à moins d'avoir accès à des routeurs proches de la machine cible.

TCP fonctionne sur un mécanisme de prise de contact à 3 voies. Vous ne pourrez pas terminer cette poignée de main car la réponse de la poignée de main de la machine cible ira à votre adresse IP usurpée et non à la vôtre (sauf si, comme dit précédemment, vous contrôlez ses routeurs à proximité et redirigez la réponse vers vous-même).

PS: Vous pourrez peut-être envoyer un message UDP, mais je ne l'ai pas essayé.

looneyGod
la source
Étant donné que la question d'origine demandait comment cela serait fait curl, je suppose qu'ils essaient d'accéder à une ressource HTTP. HTTP sur UDP n'est pas quelque chose qui curlprend en charge AFAIK ni quelque chose au-delà de l'expérimentation à ce stade.
IvanGoneKrazy
1

Il est possible de modifier l'adresse IP source, si votre interface réseau locale a plusieurs adresses IP.

Supposons que vous ayez un serveur qui possède 2 adresses IP 1.1.1.10et 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

Vous pouvez vérifier votre adresse IP publique actuelle avec le formidable service Web ifconfig.co :

$ curl -4 ifconfig.co
1.1.1.10

Pour accéder au service Web ifconfig.co à l'aide de l'autre adresse IP ( 2.2.2.20), vous pouvez créer un itinéraire basé sur l'adresse IP du serveur cible. Utilisez dig pour trouver les adresses IP cibles à partir des Aenregistrements DNS :

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

Ajoutez maintenant des itinéraires personnalisés pour ces adresses 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

En exécutant à nouveau curl, vous voyez que vous utilisez l'autre adresse IP source:

$ curl -4 ifconfig.co
2.2.2.20

De plus, vos informations de routage sont mises à jour:

$ 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

Remarque: cela ne fonctionne que si l'adresse IP source peut être résolue sur votre serveur, sinon la négociation TCP à 3 échouera, comme indiqué ici .

pymkin
la source