Python 2.7 使用Python Scapy修复pcap校验和

Python 2.7 使用Python Scapy修复pcap校验和,python-2.7,protocols,scapy,Python 2.7,Protocols,Scapy,我已经编写了一个小python脚本,用scapy修复L3-4协议的校验和。当我运行脚本时,它没有接受命令行参数,或者可能是其他原因,它没有生成修复校验和pcap。我已经从scapy命令行验证了rdpcap(),它正在使用脚本工作,但没有得到执行。我的节目是 import sys import logging logging.getLogger("scapy").setLevel(1) try: from scapy.all import * except ImportError: imp

我已经编写了一个小python脚本,用scapy修复L3-4协议的校验和。当我运行脚本时,它没有接受命令行参数,或者可能是其他原因,它没有生成修复校验和pcap。我已经从scapy命令行验证了rdpcap(),它正在使用脚本工作,但没有得到执行。我的节目是

import sys
import logging
logging.getLogger("scapy").setLevel(1)
try:
    from scapy.all import *
except ImportError:
import scapy
if len(sys.argv) != 3: 
    print "Usage:./ChecksumFixer  <input_pcap_file> <output_pcap_file>"
    print "Example: ./ChecksumFixer input.pcap output.pcap"
    sys.exit(1)

#------------------------Command Line Argument---------------------------------------

input_file = sys.argv[1]
output_file = sys.argv[2]

#------------------------Get The layer and Fix Checksum-------------------------------

def getLayer(p):
    for paktype in (scapy.IP, scapy.TCP, scapy.UDP, scapy.ICMP):
        try:
            p.getlayer(paktype).chksum = None
        except: AttributeError
        pass
    return p
#-----------------------FixPcap in input file and write to output fi`enter code here`le----------------

def fixpcap():
    paks = scapy.rdpcap(input_file)
    fc = map(getLayer, paks)
    scapy.wrpcap(output_file, fc) 
导入系统 导入日志记录 logging.getLogger(“scapy”).setLevel(1) 尝试: 从斯卡皮来的,都是进口货* 除恐怖外: 进口服装 如果len(sys.argv)!=三: 打印“用法:./ChecksumFixer” 打印“示例:./ChecksumFixer input.pcap output.pcap” 系统出口(1) #------------------------命令行参数--------------------------------------- input_file=sys.argv[1] 输出文件=sys.argv[2] #------------------------获取图层并修复校验和------------------------------- def getLayer(p): 对于paktype-in(scapy.IP、scapy.TCP、scapy.UDP、scapy.ICMP): 尝试: p、 getlayer(paktype).chksum=None 除:属性错误 通过 返回p #-----------------------在输入文件中修复PCAP并写入输出fi`在此处输入代码`le---------------- def fixpcap(): paks=scapy.rdpcap(输入文件) fc=映射(getLayer,paks) scapy.wrpcap(输出文件,fc)
函数未执行的原因是您没有调用它。在脚本末尾添加对
fixpcap()
的调用可以解决此问题

此外,这里还有一些更正和建议:

  • 除了异常之外,
    后面的语句也应该缩进,如下所示:

    try:
        from scapy.all import *
    except ImportError:
        import scapy
    
  • 用于分析命令行参数

  • 将主代码包装在一个块中


  • 我以前也做过同样的改变,效果很好。我忘了更新stackoverflow。