#About
1. 와이어샤크에서의 Layer 4까지의 필드 정보 파싱
import socket
import dpkt
path = "C:/test.pcap"
def display():
print "\t[-] TYPE : {}".format(protocol)
print "\t[-] MAC : {} ---> {}".format(smac, dmac)
print "\t[-] LEN : {}".format(int(total_len, 16))
print "\t[-] TTL : {}".format(int(ttl, 16))
print "\t[-] IP : {} ---> {}".format(sip, dip)
print "\t[-] PORT : {} ---> {}".format(int(sport, 16), int(dport, 16))
with open(path,'rb') as p:
magic = p.read(4).encode('hex')
flag = (False, True)[magic == "d4c3b2a1"]
p.seek(36,1)
dmac = p.read(6).encode('hex')
smac = p.read(6).encode('hex')
type = p.read(2).encode('hex')
type = ("IPv6","IPv4")[type=="0800"]
if flag==True:
print "[+] Start parsing : {}".format(path)
if type=="IPv4":
p.seek(2,1) ; total_len = p.read(2).encode('hex')
p.seek(4,1) ; ttl = p.read(1).encode('hex')
protocol = p.read(1).encode('hex')
protocol = ("","TCP")[protocol=="06"]
p.seek(2,1)
sip = p.read(4).encode('hex')
dip = p.read(4).encode('hex')
sport = p.read(2).encode('hex')
dport = p.read(2).encode('hex')
ip_divide = range(0, 8, 2) ; mac_divide = range(0,12,2)
sip = '.'.join([str(int(sip[a:a+2],16)) for a in ip_divide])
dip = '.'.join([str(int(dip[b:b+2],16)) for b in ip_divide])
smac = ':'.join([str((smac[c:c+2])) for c in mac_divide]).upper()
dmac = ':'.join([str((dmac[d:d+2])) for d in mac_divide]).upper()
display()
elif type=="IPv6":
print("\t[-] It is IPv6 Packet")
elif flag==False:
print "[-] {} is not pcap file".format(path)
[코드 1] - test
[그림 1] - result
#To Do
1. 하나의 패킷이 아닌 모든 패킷 파싱을 위한 루프와 로직 만들기
2. 인터페이스 스니핑
'Coding' 카테고리의 다른 글
Crawling (0) | 2018.07.27 |
---|---|
[ Crawler ] Kakao Donation Automation Scripts (카카오 기부 자동화 스크립트) (1) | 2018.02.21 |
원탁의 기사 (0) | 2018.01.05 |
100 계단 오르기 (0) | 2018.01.04 |
[ Parser ] Portable Executable Structure Parsing (PE 구조 분석) (0) | 2017.10.23 |