2010-01-17 4 views
0

는 다음을 상상해 :클라이언트 - 기계/브라우저가 요청되지 않은 HTTP 응답을 어떻게 처리합니까?

  • 사용자 스크립트 (http://sample.org/test.php)로 이동,

  • 스크립트는 다른 페이지 (http://google.com/)에 HTTP 요청을 보냅니다. 이 예에서는 curl을 사용합니다.

  • 스크립트는 CURLOPT_INTERFACE을 통해 요청의 IP 주소를 사용자의 IP로 설정합니다.

원격 호스트가 요청에 지정된 IP 주소로 응답을 보내면 요청하는 스크립트가 응답을받지 못한다는 것을 이미 알고 있습니다.

궁금한 점은이 응답이 어떻게됩니까? 클라이언트가 외부 주소가 하나 인 LAN에 있고 해당 IP로 전송 된 모든 트래픽이 DHCP 서버 역할을하는 라우터에 의해 처리된다고 가정하면 응답은 사용자의 컴퓨터로 돌아옵니다. 그렇다면 사용자의 브라우저에서 처리되었는지 확인할 수있는 방법이 있습니까? 그렇다면 브라우저가 일반적으로 어떻게 처리할까요? Google에 새 창이 열리나요?

나는이 질문에 대한 후속 조치를 확실히하고 있지만, 내가 실험을하기 전에이 레벨에서 어떤 일이 일어나는지 매우 궁금하다.

+0

http 서버는 다른 IP 주소 (또는 다른 TCP 연결)로 응답을 보내지 않습니다. 왜 그렇게 생각하니? – nos

+0

@nos - 다른 IP 주소로 보내지 않을 것입니다. 요청 된 IP 주소로 보내집니다. * 리퀘 스터 *가 IP 주소를 다른 IP 주소로 변경했을 때 IP 주소로 보낸 응답이 어떻게되는지 궁금합니다. – Anthony

답변

4
  • 스크립트는 CURLOPT_INTERFACE를 통해 사용자의 IP에 대한 요청의 IP 주소를 설정합니다.

일반적으로 이것은 작동하지 않습니다. 귀하의 ISP는 귀하가 가지고 있어야하는 IP 주소를 알고 있으며 "가짜"IP 주소에서 오는 트래픽을 전달하지 않습니다.

특히, TCP가 three-way handshake을 필요로하기 때문에 가짜 IP와 단방향으로 통신 할 수 있으므로 (응답이 사용자에게 도달하지 않기 때문에) 작동중인 TCP 연결을 설정할 수 없습니다. 따라서 웹 요청을 제출할 수 없습니다.

궁금한 점은이 응답이 어떻게됩니까? 클라이언트가 외부 주소가 하나 인 LAN에 있고 해당 IP로 전송 된 모든 트래픽이 DHCP 서버 역할을하는 라우터에 의해 처리된다고 가정하면 응답은 사용자의 컴퓨터로 돌아옵니다. 사용자의 PC가 내부 IP 주소가 있고 NAT를 사용하는 경우

, 라우터는 그것이 그 응답을 일치 수있는 어떤 나가는 요청을 보지 않았기 때문에 (에 패킷을 전달하는 LAN 시스템 알 수 없습니다). 따라서 대답은 생략됩니다. 당신이 응답이 클라이언트에 도달하는 얻을 수 경우

에도 : 그것은 한 경우

은, 그것은 사용자의 브라우저에 의해 처리되었는지 확인 할 수있는 방법이 있을까요?

아니요. 위에서 설명한 것처럼 TCP 요청은 3 방향 핸드 셰이크로 구성됩니다.이 핸드 셰이크가 완료되지 않았으므로 운영 체제에서 패킷을 삭제합니다.

2

CURLOPT_INTERFACE은 여러 개의 IP 주소가 할당 된 컴퓨터에서이 주소 중 어떤 주소를 연결 원본 IP로 사용해야하는지 지정하는 데 사용됩니다. 컴퓨터의 IP 주소 인 을 속일 수 없습니다. 대부분 오류가 발생하거나 옵션이 무시되고 OS가 소스 인터페이스를 자동으로 선택합니다 (기본 동작).

응답은 요청과 동일한 TCP 연결에서 반환됩니다.

+0

LAN에서 다른 컴퓨터의 IP를 사용하는 인터페이스를 만들 수 없다고 생각하는 이유는 무엇입니까? – jspcal

+0

질문은 새로운 나가는 연결을 할 때 임의의 클라이언트의 IP를 스푸핑하려고하는 PHP 스크립트에 관한 것이 었습니다. 그래서 원격 엔드는 PHP 스크립트가 실행되는 호스트가 아닌 원래의 클라이언트로 직접 패킷을 보냅니다. LAN상에서 중복 된 IP를 포함하는 인위적인 시나리오에서 그러한 일이 일어날 수는 있지만 실제 사용 사례에서는 작동하지 않을 수 있습니다. – Wyzard

관련 문제