2012-08-23 1 views
2

정확성을 검사하기 위해 SIP 메시지를 스니핑하고 디코딩 할 수있는 파이썬 스크립트가 필요합니다. 이 스크립트의 기본으로 나는 스니핑 패킷에 대해 python-libpcap 라이브러리를 사용합니다. UDP 패킷을 잡아서 SIP 페이로드를 추출 할 수는 있지만 디코딩 방법을 모르겠습니다. 파이썬에는 패킷 디코딩을위한 라이브러리가 있습니까? 나는 dpkt 만 찾았지만 SIP를 디코딩 할 수 없다는 것을 이해했다. 그런 라이브러리가 없다면 어떻게 손으로이 물건을 할 수 있습니까?파이썬으로 SIP 메시지 디코드

미리 감사드립니다.

+0

"정확성"이란 무엇을 의미합니까? 당신이 달성하고자하는 것의 맥락은 무엇입니까? – plmaheu

+0

페이로드가 나타내는 코덱은 무엇입니까? –

+0

pboy, "정확성"에 대해서 - SIP 메시지의 헤더와 바이너리 SMS 페이로드가 포함 된 SIP 메시지 - SMS 인코딩의 정확성을 확인하고 검사해야합니다. user1585811, 죄송 합니다만, 왜 코덱에 대해 묻고 있습니까? 나는 캡슐화되지 않은 신호 메시지 SIP를 포함하는 UDP 메시지를 가지고 있으며이를 추출하고 해독해야합니다. – Dieselist

답변

3

마지막으로 sharktools (http://www.mit.edu/~armenb/sharktools/)의 pyshark 도움으로이 작업을 수행했습니다. IP 패키지를 스니핑하기 위해 libpcap 대신 scapy를 사용했습니다.

1

파이썬을위한 twisted 프레임 워크는 SIP에 대한 일부 지원을 포함합니다. 그러나 RFC 3261이 아닌 RFC 2543으로 작성된 것 같습니다.

dpkt 라이브러리에는 몇 가지 기본 SIP 지원이 있습니다.

또 다른 접근법은 ANTLR과 같은 파서 생성기를 사용하여 SIP 메시지를 구문 분석하는 것입니다. ANTLR은 파이썬 기반 파서를 만들 수 있습니다. 웹에서 SIP에 대한 ANTLR 문법을 발견 한 것은 놀랄 일이 아니지만 처음 몇 분 동안은 검색하지 못했습니다.

0

귀하의 요구가 꽤 관습적 인 것처럼 보였으므로 직접 제안하는 것이 좋습니다. 구문은 RFC 3261 끝에있는 BNF 문법에 정의되어 있습니다. 아주 거대하기 때문에 전체 문법이 아닌 필요한 것을 검증하는 것이 좋습니다.

단계별 절차를 시도하십시오. 같은 함수에서 모든 것을 처리하려고하면 거대하고 복잡한 함수로 끝날 것입니다. 각 단계에서 데이터를 생성하여 처리를 단순화하십시오. 예를 들어, 첫 번째 단계에서 패킷의 각 행을 읽고 머리글/내용의 쌍을 만들 수 있습니다. 이것은 더 정제 될 수있는 친숙한 데이터 구조를 만듭니다.

yotommy가 말했듯이, ANTLR을 사용할 수는 있지만 익숙하지 않으면 내 선택이되지 않습니다. 문법은 방대하며 ANTLR을 사용하여 표현하기 쉽지 않습니다.