2010-06-02 4 views
5

맞춤 Wireshark 해부기에서 누락 된 UDP 프레임을 어떻게 식별합니까?Wireshark Dissector : 누락 된 UDP 프레임을 식별하는 방법?

CQS feed (reference page)에 대한 맞춤 해부 도구를 작성했습니다. 우리 서버 중 하나가이 피드를 수신 할 때 갭을 둡니다. Wireshark에 따르면 일부 UDP 프레임은 수신되지 않습니다. 다른 모든 서버에 간격이 없기 때문에 프레임이 전송되었음을 압니다.

CQS 프레임은 여러 개의 메시지로 구성되며 각 메시지에는 고유 한 시퀀스 번호가 있습니다. 내 사용자 정의 해부학자는 와이어 샤크에 다음 데이터를 제공

cqs.frame_gaps   - the number of gaps within a UDP frame (always zero) 
cqs.frame_first_seq  - the first sequence number in a UDP frame 
cqs.frame_expected_seq - the first sequence number expected in the next UDP frame 
cqs.frame_msg_count  - the number of messages in this UDP frame 

그리고 사용자 정의 열에서 각 값을 표시하고,이 스크린 샷에서와 같이 wireshark screenshot http://img692.imageshack.us/img692/9484/wiresharkcqs.jpg

내 해부학자에 코드를 추가하는 시도 단순히 저장 마지막으로 처리 된 시퀀스 번호 (로컬 정적으로) 및 해부자가 프레임을 처리 할 때 간격을 표시합니다. current_sequence != (previous_sequence + 1). GUI에서 클릭하는 위치에 따라 해부 기가 임의 액세스 순서로 호출 될 수 있기 때문에 이는 작동하지 않습니다. 그래서 프레임 10, 프레임 15, 프레임 11 등을 처리 할 수 ​​있습니다.

이전에 제공된 프레임 (또는 뒤 따르는 프레임)이 누락되었는지 여부를 내 dissector가 알 수있는 방법이 있습니까?

해부학자는 C로 작성되어

(또한 참조하십시오 companion post on serverfault.com)

답변

4

당신은 와이어 샤크가 해부를 여러 번 수행 있다는 사실을 숙지에 대한 자세한 내용은 함수 인수 중 하나입니다. 처음으로 파일을로드 할 때 엄격한 순서로 패킷을 분석합니다. 그런 다음 packet_tree_view를 스크롤하거나 패킷을 선택하여 트리를 만들 때 디 시커를 호출합니다.

당신은 해부학자가 THER 처음 FOT를 호출하면 확인할 수 있습니다

if (PINFO_IS_VISITED(pinfo)) { ... }; 

귀하의 해부학자는 처음과 다음 해부 다르게 행동한다.

첫 번째 해부에서는 시퀀스 번호와 순서가 틀린 경우 각 패킷 (예 : 해시 테이블)에 대한 정보를 저장해야합니다. 두 번째로 호출 할 때 패킷 트리를 올바르게 작성해야합니다.

+0

나는 오랫동안이 사실을 언급하지 않았지만 이것이 답이라고 생각합니다. 나는 패킷이 두 번 해부되었음을 깨닫지 못했다. –

0

당신이 이전 또는 다음 프레임으로 들여다 수 있을지가 konw하지 않지만, 와이어 샤크는 tcpdump를로드 될 때 호출됩니다 각 골격에 순서대로 이등분하십시오. 따라서 정적 로컬 변수를 배열 또는 해시 테이블에 추가하여 값을 저장할 수 있습니다. 그런 다음 해부사는 이전 및 이후 프레임에 대한 배열을 검사하고 분석을 수행 할 수 있습니다.

당신은 그 PINFO vairable 봐야한다, 즉 프레임 번호, IP 정보 등