scapy

2013-12-09 3 views
0

에서 세션 기능에 더 많은 열을 추가하는 방법 내가이 테이블에 열을 추가 할 수있는 방법 scapy에서 함수 pkt.sessioins()을 좋아한다 :scapy

x.sessions() 
{'TCP 10.0.2.15:32896 > 173.194.34.159:80': <PacketList: TCP:11 UDP:0 ICMP:0 Other:0>, 

감사

+0

각 세션에 대한 더 많은 데이터를 원하십니까? – RyPeck

+0

예, pkts 크기 – user3030637

답변

0

추가하려면 자신 만의 "세션 추출기"기능을 정의하고 .sessions() 메소드로 전달하는 데 필요한 자세한 정보.

하지만 전체 세션을 읽은 경우에만 알 수 있으므로 전체 세션과 관련된 정보 (총 데이터 크기 등)를 추가 할 수 없습니다. 하지

def sessions(plist, session_extractor=None): 
    if session_extractor is None: 
     def session_extractor(p): 
      sess = "Other" 
      if 'Ether' in p: 
       if 'IP' in p: 
        if 'TCP' in p: 
         sess = p.sprintf("TCP %IP.src%:%r,TCP.sport% > %IP.dst%:%r,TCP.dport%") 
        elif 'UDP' in p: 
         sess = p.sprintf("UDP %IP.src%:%r,UDP.sport% > %IP.dst%:%r,UDP.dport%") 
        elif 'ICMP' in p: 
         sess = p.sprintf("ICMP %IP.src% > %IP.dst% type=%r,ICMP.type% code=%r,ICMP.code% id=%ICMP.id%") 
        else: 
         sess = p.sprintf("IP %IP.src% > %IP.dst% proto=%IP.proto%") 
       elif 'ARP' in p: 
        sess = p.sprintf("ARP %ARP.psrc% > %ARP.pdst%") 
       else: 
        sess = p.sprintf("Ethernet type=%04xr,Ether.type%") 
      return sess 
    sessions = defaultdict(lambda: [plist.__class__(), 0]) 
    for p in plist.res: 
     sess = session_extractor(plist._elt2pkt(p)) 
     sessions[sess][0].append(p) 
     sessions[sess][1] += len(p) 
    return dict(sessions) 

합니다 (키 :

전체 데이터 크기를 추가하는 빠른 방법, 예를 들어, 자신의 sessions() 기능 (원래 PacketList.sessions() 방법에서 적응 만들 것 변경)의 결과는 두 개의 요소 인 list이고 첫 번째 요소는 PacketList 개체이며 .sessions() 메서드와 마찬가지로 두 번째 요소는 세션의 총 데이터 크기입니다.