사용자 정의 IP로 CURL 요청 보내기 싶습니다. 컴퓨터가 전송하기 때문에

가능하지 않습니까? 응답이 필요 없다고 가정하고 요청을 보내고 싶습니다. 컴퓨터가 전송하기 때문에 tcp / ip 헤더를 변경할 수 없어야합니까? 나는 아마도 유니콘에서 배우는 무언가가 정말로 궁금합니다.



답변

-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


답변

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

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

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


답변

로컬 네트워크 인터페이스에 여러 개의 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 방향 핸드 셰이크에 실패 합니다 .


답변