2011-11-20 6 views
1

TCPDUMP를 사용하여 수집 된 수집 된 패킷 덤프를 통해 연결을 집계합니다. 내 코드는 Ruby에있다. 코드는 4- 튜플 (SrcIP, SrcPort, DstIP, DstPort)을 사용하는 연결을 구별합니다. 이제 동일한 IP와 동일한 포트를 사용하는 동일한 시스템간에 연결하는 경우 다음 방법으로 연결을 차별화합니다. 1. 연결 사이의 시간이 2Hrs 이상이되면 새로운 연결 2. FIN 또는 RST를 이미 보았 으면 새 패킷은 새 연결에서 나온 것입니다. 3. SYN의 수 2 개 이상 (각 방향으로 1 개)이면 연결은 새로운 연결입니다.Seq No, Ack No 및/또는 Datasize를 사용하여 TCP 연결을 구별합니다.

내가 해결할 수없는 상황은 다음과 같습니다. 2Hrs 내에 동일한 두 튜플 (동일한 튜플을 사용하는) 간의 새 연결이 발생하고 TCPDUMP가 이전의 RST 또는 FIN 패킷을 삭제하고 2 또는 SYN 두 연결의 패킷. 이 경우 위에 설정된 조건 중 어느 것도 작동하지 않습니다. 그리고 남아있는 유일한 정보 집합은 새로운 패킷 집합, Seq Nos, Ack Nos 및 데이터 크기의 시간입니다. 이 정보를 사용하면 연결이 새로운 것이거나 오래된 것일 수도 있습니다.

시퀀스 No 또는 SeqNo와 AckNo 사이에 패턴이 있는지 확인하려했지만 아무 것도 명확하지 않은 것으로 보입니다.

답변

1

TCP (주로)는 sliding acknowledgement window을 사용하기 때문에 SeqNo와 AckNo는 단조롭게 증가하는 필드가됩니다. integer overflow으로 인해 랩 어라운드 될 때까지 계속 증가합니다.

또한 트래픽의 한 방향에서 나온 SeqNo는 다른 트래픽 방향의 AckNo와 일치하며 사용자가 확인할 수있는 또 다른 불변 조건을 제공합니다.

하나의 복잡한 인자는 man in the middle attacks의 가능성을 줄이기 위해 SeqNo가 초기에 랜덤하게 선택된다는 것입니다. 따라서 다른 매개 변수가있는 새 세션은 이전에 표시되었던 시퀀스 번호보다 큰 초기 시퀀스 번호를 선택하고 알고리즘을 혼동시킬 수 있습니다.