代码之家  ›  专栏  ›  技术社区  ›  ds345

获取数据包的源地址和端口号-Scapy脚本

  •  6
  • ds345  · 技术社区  · 11 年前

    我正在对网络进行嗅探,并试图获取每个tcp数据包的ip地址和端口号。

    我在python中使用了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地址的方法。

    谢谢

    2 回复  |  直到 11 年前
        1
  •  26
  •   Eloy user2871462    6 年前

    这不是很难。请尝试以下代码:

    #!/usr/bin/env 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)
    

    享受

        2
  •  4
  •   Brian Wylie    11 年前

    User2871462有一个很棒的答案,我会对此发表评论,但我没有所需的声誉。:)我要添加的唯一一件事是,根据使用情况,您可能希望将store=0标志添加到sniff调用中,这样就不会存储数据包。从scapy docstring“存储:是存储嗅探的数据包还是丢弃它们”。

    sniff(filter="ip",prn=print_summary, store=0)