2013-10-11 3 views
3

네트워크를 스니핑하고 모든 TCP 패킷에 IP 주소와 포트 번호를 얻으려고합니다.패킷의 소스 주소와 포트 번호 가져 오기 - Scapy 스크립트

나는 scapy를 파이썬과 함께 사용하여 성공적으로 패킷을 스니핑하고 콜백 함수에서 패킷 요약을 인쇄 할 수 있습니다. 하지만 소스의 IP 주소와 포트 번호 만 가져 오는 것과 같이 더 많은 일을하고 싶습니다. 어떻게해야합니까? 아래 코드는 다음과 같습니다.

#!/usr/bin/evn python 
from scapy.all.import.* 
def print_summary(pkt): 
    packet = pkt.summary() 
    print packet 
sniff(filter="tcp",prn=packet_summary) 

모든 패킷의 원본 IP 주소 만 인쇄하는 방법을 제안하십시오.

감사합니다.

+0

소스의 IP 주소를 가져 오기 위해 pkt [IP] .src 만 수행하면됩니다. 그것은 간단했지만 아직 많은 시간을 보냈습니다. – ds345

답변

11

매우 어렵지 않습니다. 이것을 시도하십시오 :

#!/usr/bin/evn python 
from scapy.all import * 
def print_summary(pkt): 
    if IP in pkt: 
     ip_src=pkt[IP].src 
     ip_dst=pkt[IP].dst 
    if TCP in pkt: 
     tcp_sport=pkt[TCP].sport 
     tcp_dport=pkt[TCP].dport 

     print " IP src " + str(ip_src) + " TCP sport " + str(tcp_sport) 
     print " IP dst " + str(ip_dst) + " TCP dport " + str(tcp_dport) 

    # you can filter with something like that 
    if ((pkt[IP].src == "192.168.0.1") or (pkt[IP].dst == "192.168.0.1")): 
     print("!") 

sniff(filter="ip",prn=print_summary) 
# or it possible to filter with filter parameter...! 
sniff(filter="ip and host 192.168.0.1",prn=print_summary) 

즐기십시오!

+1

Scapy 2.3을 사용하고 있는데,'if IP in pkt'와'if TCP in pkt'에서 키 값을 인용해야했습니다. – icdevppl

+0

스크립트의 첫 번째 줄에 오타가 있습니다. 해야한다 :'#!/usr/bin/env python' – martemiev

+0

pkt [TCP] .sport에서 중복 (포트)을 계산하려면. 그렇게하는 방법? – RatDon

2

User2871462에는 훌륭한 답변이 있습니다. 이에 대해 의견을 말하지만 필요한 평판은 없습니다. :) 내가 추가 할 수있는 유일한 것은 유스 케이스에 따라 패킷을 저장하지 않으므로 스니핑 호출에 store = 0 플래그를 추가 할 수 있다는 것이다. scapy docstring "store : sniffed packet 저장 또는 폐기".

sniff(filter="ip",prn=print_summary, store=0) 
관련 문제