2009-11-30 3 views
3

첫째, 비교적 네트워크 프로그래밍에 익숙하지 않습니다. 서버 응용 프로그램에 도달하기 전에 HTTP 트래픽을 가로 채고 지연시키고 싶습니다. 필자는 libnetfilter_queue에 대해 조사해 보았습니다. libnetfilter_queue는 적절하게 지연시킬 필요가있는 모든 정보를 제공하지만 너무 낮은 수준에서는 제공하지 않습니다. 나는 거기에서 트래픽을 지연시킬 수는 있지만, IP 데이터 그램을 거의 즉시 받아들이지 않으면 (지연시킬 때 스택에 전송하므로) ACK가 도착하지 않을 때 재전송을하게된다.전송 계층 위의 가로 채기 트래픽

TCP를 처리하고 싶지 않거나 필요없는 페이로드 만 제공합니다. 그래서 내 질문은 목적지에 도달하기 전에 특정 포트에서 트래픽을 가로채는 방법이지만 TCP가 확인하고 확인한 후에 어떻게해야합니까?

감사

편집 : 희망이 태그와 libnetfilter_queue에서 명백하다 -이 리눅스

입니다
+0

패킷의 내용을 변경하고 싶습니까? –

+0

아니요 - 나중에 변경하지 않고 지연시키고 보냅니다. – Ray2k

+1

지금 당장 생각해 볼 수있는 가장 좋은 아이디어는 다음과 같습니다. iptables -A PREROUTING -t nat -p tcp -dport 80 -j REDIRECT --to-port 1024 그러면 포트 1024에서 읽을 수 있으며 실제 각 연결마다 포트 80 (두 번째 시간을 우회합니까?). 그런 다음 내가하고 싶은 일을하고 싶을 때 포트 80에 씁니다. 나는 응답을 너무 전달해야 할 것이다 (나는 그들을 지연시키고 싶지 않다). 정말 끔찍한 생각처럼 들립니다. 이견있는 사람? – Ray2k

답변

1

HTTP 프록시를 통해 연결을 도용합니다. Google은 클라이언트에서 HTTP_PROXY를 설정하거나 현재 서버의 IP 및 포트 번호로 필터를 설정하여 실제 서버를 다른 IP로 이동하는 경우이를 수행하는 좋은 방법입니다.

그래서 실제 TCP 연결은 클라이언트와 사용자, 그리고 사용자와 서버 사이에 있습니다. TCP는 항상 임무를 성취하기 때문에 ACK를 처리 할 필요가 없습니다.

편집 : iptables를 사용하여 동일한 컴퓨터에서 투명한 프록시 프로세스를 통해 트래픽을 리디렉션하는 원본 아이디어가 이미 나타났습니다.

+0

예 이것이 내가 한 일이며 앞으로 나아갈 수있는 가장 좋은 방법 인 것 같습니다. – Ray2k

0

그럼 난 내 댓글에 제안 내가이 짓을했는지, 그리고 그것이 느낄 않은 경우에도 작동 그것을하는의 길게 바람이 센 방법.

(또는) 문제는 웹 서버가 이제 모든 요청이 localhost에서 비롯된 것이라고 생각할 수 있다는 것입니다. 정말이 딜레이가 클라이언트와 서버 모두에게 투명 해 지길 바란다. 이것에 대해 제가 할 수있는 일이 있습니까?

그렇지 않은 경우 의미는 무엇입니까? 각 HTTP 세션은 다른 포트를 통해 발생합니다. 즉, 완전히 분리되어야합니다. 아마 많은 세션에 대한 주소가 같은 NAT 뒤에있을 때 고려해 볼 수 있습니다.