
tshark용 Python 래퍼, 와이어샤크 디섹터를 사용한 파이썬 패킷 파싱을 허용 (Python2 레거시 버전)
이 저장소는 Python2.7+에서 작동하는 pyshark의 레거시 버전을 위한 것입니다. 버전 0.3.8 이후로는 버그 수정만 받습니다. Python 3.5+에서만 지원되는 새 버전은 메인 저장소를 사용해 주세요.
tshark용 Python 래퍼로, wireshark 디섹터를 사용하여 Python 패킷을 파싱할 수 있습니다.
확장 문서: http://kiminewt.github.io/pyshark
Python 패킷 파싱 모듈은 꽤 많이 있지만, 이 모듈은 실제로 패킷을 파싱하지 않고 tshark(와이어샤크 명령줄 유틸리티)의 XML 내보내기 기능을 사용하여 파싱한다는 점에서 다릅니다.
이 패키지는 캡처 파일 또는 실시간 캡처에서 파싱할 수 있으며, 설치된 모든 wireshark 디섹터를 사용합니다. Windows/Linux에서 테스트되었습니다.
다음 명령을 실행하여 pypi에서 최신 버전을 설치하세요.
pip install pyshark-legacy
또는 git 저장소에서 설치:
git clone https://github.com/KimiNewt/pyshark-legacy.git
cd pyshark/src
python setup.py install
libxml을 설치해야 할 수도 있습니다. clang에서 오류가 발생하거나 libxml 관련 오류 메시지가 나타나면 다음을 실행하세요.
xcode-select --install
pip install libxml
XCode의 EULA에 동의해야 할 수도 있으므로 GUI에서 "Accept" 대화상자를 클릭할 준비를 하세요.
>>> import pyshark
>>> cap = pyshark.FileCapture('/tmp/mycapture.cap')
>>> cap
<FileCapture /tmp/mycapture.cap (589 packets)>
>>> print cap[0]
Packet (Length: 698)
Layer ETH:
Destination: BLANKED
Source: BLANKED
Type: IP (0x0800)
Layer IP:
Version: 4
Header Length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
Total Length: 684
Identification: 0x254f (9551)
Flags: 0x00
Fragment offset: 0
Time to live: 1
Protocol: UDP (17)
Header checksum: 0xe148 [correct]
Source: BLANKED
Destination: BLANKED
...
>>> capture = pyshark.LiveCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
>>> capture = pyshark.LiveRingCapture(interface='eth0')
>>> capture.sniff(timeout=50)
>>> capture
<LiveCapture (5 packets)>
>>> capture[3]
<UDP/HTTP Packet>
for packet in capture.sniff_continuously(packet_count=5):
print 'Just arrived:', packet
>>> capture = pyshark.RemoteCapture('192.168.1.101', 'eth0')
>>> capture.sniff(timeout=50)
>>> capture
데이터는 여러 방식으로 접근할 수 있습니다. 패킷은 레이어로 나뉘며, 먼저 적절한 레이어에 도달한 다음 필드를 선택해야 합니다.
다음 모두 작동합니다:
>>> packet['ip'].dst
192.168.0.1
>>> packet.ip.src
192.168.0.100
>>> packet[2].src
192.168.0.100
레이어가 패킷에 있는지 확인하려면 이름을 사용할 수 있습니다:
>>> 'IP' in packet
True
모든 가능한 필드 이름을 보려면 packet.layer.field_names 속성(예: packet.ip.field_names) 또는 인터프리터의 자동 완성 기능을 사용하세요.
필드의 원래 바이너리 데이터나 예쁜 설명도 얻을 수 있습니다:
>>> p.ip.addr.showname
Source or Destination Address: 10.0.0.10 (10.0.0.10)
# And some new attributes as well:
>>> p.ip.addr.int_value
167772170
>>> p.ip.addr.binary_value
'\n\x00\x00\n'
Pyshark는 WEP, WPA-PWD, WPA-PSK 표준을 사용한 트레이스 자동 복호화를 지원합니다 (WPA-PWD가 기본값입니다).
>>> cap1 = pyshark.FileCapture('/tmp/capture1.cap', decryption_key='password')
>>> cap2 = pyshark.LiveCapture(interface='wi0', decryption_key='password', encryption_type='wpa-psk')
지원되는 암호화 표준의 튜플인 SUPPORTED_ENCRYPTION_STANDARDS가 각 캡처 클래스에 존재합니다.
>>> pyshark.FileCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
>>> pyshark.LiveCapture.SUPPORTED_ENCRYPTION_STANDARDS
('wep', 'wpa-pwd', 'wpa-psk')
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 이 프로젝트에 대한 기여는 동일한 라이선스에 따라 수락됩니다.