사용자 정의 IP로 CURL 요청 보내기


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

참고 문헌 :

Modify_method_and_headers


1
내가 생각하는 소스 IP를 바꾸고 싶다. 내가 말할 수있는 한 그것을 허용하지 않는다.
tmm

어느 프로토콜로? 아파치 액세스 로그에 반영되는 소스 IP 주소 변경의 실제 예를 추가했습니다.
geedoubleya

2
http http http http
tmm

이것은 컴퓨터가 원시 TCP 요청에 연결된 IP를 변경하지 않습니다.
de Raad

3

나는 대답이 IP를 스푸핑하는 데 실제로 도움이되지는 않는다고 생각합니다. 대상 컴퓨터에 가까운 라우터에 액세스 할 수 없으면 소스 IP를 스푸핑 할 수 없습니다.

TCP는 3 방향 핸드 셰이크 메커니즘에서 작동합니다. 대상 시스템의 핸드 셰이크 응답이 자신의 IP가 아닌 스푸핑 된 IP로 이동하므로이 핸드 셰이크를 완료 할 수 없습니다 (앞서 말했듯이 근처의 라우터를 제어하고 자신에게 응답을 리디렉션하지 않는 한).

추신 : UDP 메시지를 보낼 수는 있지만 시도하지 않았습니다.


원래 질문은이 작업을 수행하는 방법에 대해 물었으므로 curlHTTP 리소스에 액세스하려고한다고 가정합니다. UDP를 통한 HTTP curl는 AFAIK 를 지원하는 것이 아니며 현재로서는 실험적인 것이 아닙니다.
IvanGoneKrazy

1

로컬 네트워크 인터페이스에 여러 개의 IP 주소가있는 경우 소스 IP 주소를 변경할 수 있습니다.

당신이이 IP 주소가있는 서버가 있다고 가정, 1.1.1.102.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

awesome ifconfig.co 웹 서비스를 사용하여 현재 퍼블릭 IP 주소를 확인할 수 있습니다 :

$ curl -4 ifconfig.co
1.1.1.10

다른 IP 주소 ( )를 사용하여 ifconfig.co 웹 서비스에 액세스하려면 2.2.2.20대상 서버의 IP 주소를 기반으로 라우트를 작성할 수 있습니다. dig를 사용하여 DNS A레코드 에서 대상 IP 주소를 찾으십시오 .

$ 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 3 방향 핸드 셰이크에 실패 합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.