Надсилання запиту CURL з користувацьким IP-адресою


19

Хіба це не можливо? Припустимо, що мені не потрібна відповідь, я просто хочу надіслати запит. Чи не можемо ми змінити заголовки tcp / ip, оскільки наш комп'ютер надсилає його? Мені, певно, щось не вистачає, просто дуже цікаво, дізнавшись про це в універі.

Відповіді:


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

Список літератури:

Змініть_метод_і_головники


1
Я хочу змінити джерело IP, я думаю, і це не дозволяє це, наскільки я можу сказати ...
tmm

До якого протоколу? Я додав реальний приклад зміни IP-адреси джерела, що відображається в журналах доступу до апаш.
geedoubleya

2
http http http http
tmm

Це не змінить IP-адресу, яку машина бачить, додану до необробленого запиту TCP.
де Раад

3

Я думаю, що прийнята відповідь насправді не допоможе вам повністю підробити ваш IP. Ви дійсно не можете підробити свій вихідний IP, якщо у вас немає доступу до маршрутизаторів, близьких до цільової машини.

TCP працює за тристороннім механізмом рукостискання. Ви не зможете завершити це рукостискання, оскільки відповідь на рукостискання від цільової машини перейде на ваш підроблений IP, а не на ваш власний (якщо, як було сказано раніше, ви керуєте його маршрутизаторами поблизу та перенаправляєте відповідь на себе).

PS: Можливо, ви зможете надіслати повідомлення UDP, але я не намагався.


Оскільки в оригінальному запитанні було задано питання, як це робити curl, я припускаю, що вони намагаються отримати доступ до якогось ресурсу HTTP. HTTP через UDP - це не те, що 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

Ви можете підтвердити свою поточну загальнодоступну IP-адресу за допомогою дивовижного веб-сервісу ifconfig.co :

$ curl -4 ifconfig.co
1.1.1.10

Для доступу до веб-служби ifconfig.co за допомогою іншої IP-адреси ( 2.2.2.20), ви можете створити маршрут на основі IP-адреси цільового сервера. Використовуйте dig для пошуку цільових IP-адрес із Aзаписів DNS :

$ 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 завершиться невдачею, як зазначено тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.