그렇지 않습니까? 응답이 필요하지 않고 요청만 보내고 싶다고 가정해 보겠습니다. 우리 컴퓨터가 전송했기 때문에 tcp/ip 헤더를 변경할 수 있어야 하지 않나요? 아마 제가 뭔가를 놓치고 있는 것 같은데, 대학에서 그것에 대해 배우고 싶었을 뿐입니다.
답변1
매개변수를 사용할 수 있습니다 -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:".
인용하다:
답변2
나는 받아 들인 대답이 당신의 IP를 스푸핑하는 데 실제로 도움이되지 않는다고 생각합니다. 대상 컴퓨터에 가까운 라우터에 액세스할 수 없으면 원본 IP를 실제로 스푸핑할 수 없습니다.
TCP는 3방향 핸드셰이크 메커니즘을 사용합니다. 대상 컴퓨터의 핸드셰이크 응답이 자신의 IP가 아닌 스푸핑된 IP로 전송되기 때문에 이 핸드셰이크를 완료할 수 없습니다(앞서 언급한 것처럼 근처 라우터를 제어하고 응답을 자신의 IP로 리디렉션하지 않는 한).
추신: UDP 메시지를 보낼 수도 있지만 시도해 보지는 않았습니다.
답변3
로컬 네트워크 인터페이스에 IP 주소가 여러 개 있는 경우 소스 IP 주소를 변경할 수 있습니다.
1.1.1.10
2개의 IP 주소 와 다음을 가진 서버가 있다고 가정해 보겠습니다 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
Awesome을 사용하여 현재 공용 IP 주소를 확인할 수 있습니다ifconfig.co인터넷 서비스:
$ curl -4 ifconfig.co
1.1.1.10
액세스ifconfig.co웹 서비스는 추가 IP 주소( 2.2.2.20
)를 사용하며 대상 서버의 IP 주소를 기반으로 경로를 생성할 수 있습니다. dig를 사용하여 DNS 레코드에서 대상 IP 주소를 찾으세요 A
.
$ 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
컬을 다시 실행하면 다른 소스 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방향 핸드셰이크가 실패합니다.여기.