2017-03-15 1 views
0

파이썬 3에서 사용자 정의 패킷 스니퍼를 개발 중입니다.
플랫폼에 독립적 일 필요는 없습니다. 나는 리눅스를 사용하고있다.
내가 사용하는 방법은 소켓 (AF_PACKET, SOCK_RAW)에서 recvfrom()하는 것입니다.
잘 작동하지만 recvfrom()에서 반환 한 정보에 문제가 있습니다.
recvfrom()은 5 개의 구성 요소가있는 튜플을 반환합니다.
예 : ('eno1', 2054, 0,1, b '\ x00! \ x9b \ x16 \ xfa \ xd1')
마지막 4 개의 구성 요소는 어떻게 해석합니까? 문서화 된 곳은 어디입니까?
libpcap 또는 scapy를 사용하지 않는 것이 좋습니다.

OK!
S = socket.socket (socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0003))
...
패킷, pktAdr = s.recvfrom (65565)
인쇄 ('pktAdr : 여기의 코드는 다음과 같습니다 '+ str (pktAdr))recvfrom (raw socket)의 결과를 해석하는 법

고마워!

+0

어디에 기록되어 있습니까? docs.python.org는 어떨까요? 또한 도움이 필요하면 코드를 보여줘야합니다. –

답변

0

docs.python.org에는 문서가 없으므로 약간의 연구를했습니다.
나는 이제 나 자신에게 대답 할 수있는 입장에 서있다.

recvfrom에서 반환 한 튜플은 Linux 커널에서 반환 한 sockaddr_ll 구조와 비슷합니다. 인터페이스 이름 (예를 들어 'eth0를')
- [1] - [0]
:
튜플 5 개 요소를 포함하는 물리적 수준 프로토콜 (리눅스/if_ether.h 정의)
- [2] (리눅스/if_packet.h 정의) 패킷 유형
는 - [3] : ARPHRD (리눅스/if_arp.h 정의)
- [4] : 물리 어드레스
질문에 제공된 예에 디코딩 될 수있다 :
- 'eno1'
- ARP 프로토콜 (0x806)
- 들어오는 패킷
- 이더넷 프레임
- MAC 주소
모니터 모드에서 WiFi 인터페이스의 경우 [3] 요소는 803 ('IEEE802.11 + RadioTap header'를 의미)입니다.

희망이 있으면 누군가에게 도움이됩니다.

관련 문제