pyshark 라이브러리 사용법 (pyshark Library Guide)
설치환경 : Windows 10, python 3.7
1. 설치
- 와이어샤크 프로그램에 포함된
npcap
설치 필요 pip install pyshark
2. 사용법
캡쳐파일 읽기
capture = pyshark.FileCapture('./test.pcapng')
실시간 패킷캡처 interface
capture = pyshark.LiveCapture(interface='이더넷', bpf_filter='ether src host 11:22:33:44:55:66', use_json=True, include_raw=True)
패킷 캡처
- 패킷 1개 캡처하거나 10ms 경과하면 캡처 결과 반환
capture.sniff(packet_count=1, timeout=10)
- 패킷 10개 캡처하거나 10ms 경과하면 캡처 결과 반환
capture.sniff(packet_count=10, timeout=10)
패킷 bytes 형태로 반환
print(capture[0].get_raw_packet())
모든 패킷을 실행하고 읽은대로 각 패킷과 함께 주어진 콜백(함수) 호출
def print_callback(self, pkt): print(f"packet = {pkt}") print(capture.apply_on_packets(print_callback(pkt)))
3. bpf_filter
패킷 캡쳐 조건 지정
사용 예시
- bpf_filter=‘ether host 11:22:33:44:55:66’
- bpf_filter=‘ip src 192.168.0.1’
- bpf_filter=‘len == 1518’
bpf_filter 사용 참고사이트
4. display_filter(wireshark) 필터
사용 예시
- display_filter=‘eth.addr == 11:22:33:44:55:66’
display_filter 참고사이트
5. 예제코드
import pyshark
import struct
import os
import datetime as dt
class SniffPacket():
def run(self):
# 실시간 패킷캡처 interface
capture = pyshark.LiveCapture(interface='이더넷', bpf_filter='ether src host 11:22:33:44:55:66', use_json=True, include_raw=True)
print('capture start')
for raw_data in capture.sniff_continuously():
# capture.sniff_continuously() : 설정된 인터페이스에서 캡처하여 패킷을 지속적으로 반환하는 생성기를 반환
# pyshark.LiveCapture(..., use_json=True, include_raw=True) # 위의 기능을 사용하기 위해서는 Capture 설정에서 use_json=True, include_raw=True 옵션을 추가해야함
self.analysis_data(raw_data.get_raw_packet())
def analysis_data(self, raw_data):
src_mac = struct.unpack('!6B', raw_data[6:12])
src_mac = '%02x:%02x:%02x:%02x:%02x:%02x' % src_mac
if src_mac == '11:22:33:44:55:66':
dst_mac = struct.unpack('!6B', raw_data[:6])
dst_mac = '%02x:%02x:%02x:%02x:%02x:%02x' % dst_mac
(len,) = struct.unpack('!H', raw_data[12:14])
data = raw_data[14:]
sniffPacket = SniffPacket()
sniffPacket.run()