2014-06-10 1 views
0

TCP 패킷 내가 뭘 발생할 것으로 보인다 것은 패킷 아이폰에에 문제가WinDivert : (파이썬 WinDivert) 나는 pydivert와 간단한 GET 요청을 변경하기 위해 노력하고있어

이다의 변화 GET 요청.
URL을 다시 작성하여 문자가 같거나 적은 경우 작동합니다 :
ie. =>GET /?a=z

GET /?a=asdf하지만 난 요청에 더 많은 문자를 추가 할 때, 브라우저가 루프 아무것도

아래

을 보여주는없이 종료 내가

filter_ = "true and tcp.PayloadLength > 0" 
with Handle(filter=filter_) as handle: 

while True: 

     packet = handle.receive() 

     if packet.payload[0:3]=="GET": 
      packet.payload=packet.payload.replace("GET /?a=asdf","GET /?a=gfdsazzz") 
     handle.send(packet) 

<?php 
    echo $_GET['a']; 
?> 
를 사용하는 예제 코드입니다

MAX 패킷 크기가 설정되어 있습니다. 그렇다면 어떻게 증가시킬 수 있습니까?

는 내가 분명히 gfdsazzz

답변

2

즉각적인 문제 packet.payload를 볼 수 있기 때문에 그 요청이 서버에서 응답 한보고 난 콘솔 의 모든 패킷을 인쇄 할 경우 그 다음에 대한 힌트가 될 것입니다 경우 당신이 한 것입니다 새 패킷 길이를 반영하도록 TCP/IP 헤더를 업데이트하지 마십시오.

다른 더 심각한 문제가있다 그러나

:

  1. 당신이 언급 한 바와 같이, 새로운 패킷이
  2. 하는 TCP 서열 번호/긍정 응답 번호가 필요
  3. 변경할 수있는 최대 패킷 크기 (MTU)를 초과 할 수 있습니다, 그리고 연결의 양 끝간에 더 이상 동기화되지 않습니다.
  4. 편집 : 또 다른 문제점은 URL이 여러 패킷 사이로 분할 될 수 있다는 것입니다 (특히 긴 URL의 경우).

두 번째 및 세 번째 문제는 쉽게 해결할 수 없습니다.

WinDivert로 TCP 스트림을 수정하려면 WinDivert를 사용하여 트래픽을 로컬 프록시 서버로 리디렉션하고 프록시 서버에서 스트림을 편집하도록하는 것이 훨씬 더 좋은 해결책입니다. 이 아이디어를 사용하는 예제 프로그램은 TorWall을 참조하십시오.

관련 문제