복붙노트

[PYTHON] HTTP 요청의 원래 IP 주소 스푸핑

PYTHON

HTTP 요청의 원래 IP 주소 스푸핑

이는 단일 서브넷에서만 작동해야하며 악의적 인 용도로 사용되지 않습니다.

기본적으로 파이썬으로 작성된로드 테스트 도구는 URL에서 HTTP 요청을 발생시킵니다. IP 기반로드 밸런서에 대해 성능 테스트를 수행해야하므로 요청은 다양한 IP 범위에서 이루어져야합니다. 대부분의 상용 성능 도구는이 기능을 제공하지만 필자는이 기능을 자체적으로 구축하려고합니다.

이 도구는 Python의 urllib2를 사용하여 전송합니다. 요청을 구성하는 패킷에 대해 스푸핑 된 IP 주소로 HTTP 요청을 보낼 수 있습니까?

해결법

  1. ==============================

    1.이것은 HTTP에 대한 오해입니다. HTTP 프로토콜은 TCP의 최상위를 기반으로합니다. TCP 프로토콜은 요청을 초기화하기 위해 3 방향 핸드 셰이크에 의존합니다.

    이것은 HTTP에 대한 오해입니다. HTTP 프로토콜은 TCP의 최상위를 기반으로합니다. TCP 프로토콜은 요청을 초기화하기 위해 3 방향 핸드 셰이크에 의존합니다.

    alt text http://upload.wikimedia.org/wikipedia/commons/archive/c/c7/20051221162333!300px-Tcp-handshake.png

    물론 원래 IP 주소를 스푸핑하면 동기화 단계를 지나치지 않으며 HTTP 정보가 전송되지 않습니다 (서버가 합법적 인 호스트로 보낼 수 없음).

    IP 부하 분산 장치를 테스트해야하는 경우이를 수행하는 방법이 아닙니다.

  2. ==============================

    2.연결에 사용 된 소스 주소를 설정하려고합니다. "urllib2 소스 주소"검색은 http://bugs.python.org/file9988/urllib2_util.py를 제공합니다. 나는 그것을 시도하지 않았습니다.

    연결에 사용 된 소스 주소를 설정하려고합니다. "urllib2 소스 주소"검색은 http://bugs.python.org/file9988/urllib2_util.py를 제공합니다. 나는 그것을 시도하지 않았습니다.

    실행중인 시스템은 테스트중인 IP로 구성되어야합니다.

  3. ==============================

    3.나는 방금 어제 이것을 배웠다.

    나는 방금 어제 이것을 배웠다.

    나는 당신이 이미 이것을 알고 있음을 암시했다고 생각하지만, HTTP 요청에 대한 응답은 헤더에 나타나는 IP 주소로 간다. 따라서 이러한 응답을보고 싶다면 라우터를 제어하고 스푸핑 된 IP가 응답을 보는 데 사용중인 IP로 모두 라우팅되도록 라우터를 설정해야합니다.

  4. ==============================

    4.로드 밸런서가 HTTP 요청을 포함하는 패킷의 소스 IP 대신 X-Forwarded-For 헤더를 기반으로 결정하도록 구성 할 수 있는지 확인하는 것이 좋습니다. 중요한 상업용로드 밸런서의 대부분이이 기능을 가지고 있다는 것을 알고 있습니다.

    로드 밸런서가 HTTP 요청을 포함하는 패킷의 소스 IP 대신 X-Forwarded-For 헤더를 기반으로 결정하도록 구성 할 수 있는지 확인하는 것이 좋습니다. 중요한 상업용로드 밸런서의 대부분이이 기능을 가지고 있다는 것을 알고 있습니다.

    그렇게 할 수 없다면, 아마도 보조 IP의 전체 힙을 가지고 리눅스 박스를 구성 할 필요가 있습니다 - LB에 정적 경로를 설정하는 것을 괴롭히지 말고, 리눅스 박스를 LB의 기본 게이트웨이로 만드십시오 장치.

  5. ==============================

    5.리눅스 박스에서 IP 앨리어싱을 사용하고 원하는만큼의 IP 주소를 설정할 수 있습니다. IP 헤더를 다른 네트워크에 설정하고 해당 네트워크에 대한 명시적인 경로를 설정하지 않는 한 어떤 IP가 IP 헤더에 스탬프 처리되는지 예측할 수 없다는 것이 특징입니다. 즉 -

    리눅스 박스에서 IP 앨리어싱을 사용하고 원하는만큼의 IP 주소를 설정할 수 있습니다. IP 헤더를 다른 네트워크에 설정하고 해당 네트워크에 대한 명시적인 경로를 설정하지 않는 한 어떤 IP가 IP 헤더에 스탬프 처리되는지 예측할 수 없다는 것이 특징입니다. 즉 -

    current client address on eth0 = 192.168.1.10/24
    
    server-side:
    ifconfig eth0:1 172.16.1.1 netmask 255.255.255.0
    
    client-side:
    ifconfig eth0:1 172.16.1.2 netmask 255.255.255.0 
    route add -net 172.16.1.0/24 gw 172.16.1.1 metric 0
    

    원하는만큼 서브넷을 반복합니다. 새로운 별칭 인터페이스에서 리스너를 설정하기 위해 아파치를 다시 시작하면, 여러분은 꺼져 있고 실행 중입니다.

  6. from https://stackoverflow.com/questions/1180878/spoofing-the-origination-ip-address-of-an-http-request by cc-by-sa and MIT license