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é.
Vous pouvez utiliser le -H/--header
argument:
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
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"
le client avec l'adresse IP a changé
$ 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"
man 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:".
Références:
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).
P.S .: Vous pourrez peut-être envoyer un message UDP, mais je ne l'ai pas essayé.
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.10
et 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 service Web génial 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 enregistrements DNS A
:
$ 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 TCP prise de contact à 3 voies échouera, comme indiqué ici .