2013-04-12 3 views
0

TCP를 수정해야하는 연구 작업이 있습니다. TCP listen() 함수를 구현하고 싶습니다. 내 생각은 libpcap을 사용하여 특정 포트에서 모든 패킷을 캡처합니다 (). 다음 SYN/ACK를 보내기/만들 원시 소켓을 사용하여 다음과 같은 ACK 패킷TCP 포트를 구현하기 위해 libpcap을 사용합니다.

내 질문은

  1. 전통/일반 TCP 스택은 누구나 간단히 메커니즘을 설명 할 수 있습니다, 구현) (듣는 방법 ?
  2. 구현할 수있는 아이디어는 무엇입니까? 트릭/장벽이 있습니까?
  3. 내가 필요한 것을 실현하기 위해 활용할 수있는 다른 라이브러리/소스 코드가 있습니까?

감사합니다!

답변

0

listen()이 구현 된 방법을 알고 싶다면 무료 운영 체제에서 구현의 소스 코드를 살펴 봐야하지만 기본적으로 그 작업은 소켓과 관련된 커널의 데이터 구조에 플래그를 설정하는 것입니다. 향후에 들어오는 SYN 패킷은 SYN|ACK 응답을 얻게되며 응용 프로그램이 accept()을 사용하여 대기열에서 메시지를 유출하기 전에 응답해야하는 수를 구성해야합니다.

아이디어는 구현 가능하지만 많은 작업이 있습니다. 사용자 공간에 TCP 스택을 구현하는 것입니다. 연구를 위해 연결을 열고 닫아야하는 경우 느린 시작, 창 크기 조정 및 TCP 스택에있는 모든 데이터 전송 기능을 포함하여 대부분의 작업을 수행하지 않아도됩니다.하지만 여전히 큰 직업.

커널이 들어오는 TCP 패킷에 응답하지 못하도록 방화벽 규칙이 필요하기 때문에 코드가 대신 응답 할 수 있습니다.

+0

TCP 스택 listen() 함수가 어떻게 설계 되었는가에 대한 기본적인 아이디어는 아직 없습니다. 고마워, 조금 더! – misteryes

+0

당신은 이것보다 자세한 내용을 찾을 수 없을 것입니다 : http://lxr.linux.no/#linux+v3.8.7/net/ipv4/af_inet.c#L192 – Celada

0

이 작업을 수행 할 수 없습니다. Libpcap은 패킷 처리를 중단하는 방법을 제공하지 않으므로 모든 패킷은 나머지 TCP/IP 스택에서 계속 처리됩니다. SYN/ACKS에 대한 ACK는 SYN/ACKS에 대한 ACK를 통해 TCP 연결을 생성하고, FIN은이를 종료합니다.

+0

당신은 이것을 할 수 있습니다. tcp/ip 스택이 패킷을 생성하는 것을 막기 위해해야 ​​할 일은 하나도 설정하지 않는 것입니다. 즉, 인터페이스를 켜둔 상태로 두지 만 구성하지 마십시오. 그것은 당신이 직접 tcp/ip 스택 기능을 구현해야한다는 것을 의미합니다. –

관련 문제