我正在尝试解析python中的Pcap文件。当我运行此代码时
location /nothingtosee {
auth_basic "Admin Login";
auth_basic_user_file /etc/nginx/pma_pass;
}
location ~ /favicon.ico {
access_log off;
log_not_found off;
}
location ~ \.php$ {
try_files $uri /index.php;
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
access_log /var/log/nginx/$host-access.log;
error_log /var/log/nginx/wpms-error.log;
}
我得到垃圾值而不是获得以下输出:
以太网(src ='\ x00 \ x1a \ xa0kUf',dst ='\ x00 \ x13I \ xae \ x84,', data = IP(src ='\ xc0 \ xa8 \ n \ n',off = 16384,dst ='C \ x17 \ x030',sum = 25129, len = 52,p = 6,id = 51105,data = TCP(seq = 9632694,off_x2 = 128, ack = 3382015884,win = 54,sum = 65372,flags = 17,dport = 80,sport = 56145)))
任何人都可以告诉我如何获得以上输出?
答案 0 :(得分:1)
请确保已打开文件以将其读取为二进制文件。
https://stackoverflow.com/a/15746971
f = open(pcapfile, 'rb')
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
print(eth)
答案 1 :(得分:0)
如果文件的链路层头类型不是以太网,如果您尝试将数据包解析为以太网数据包,则无法获得有用的信息。 dpkt文档并不是很好,但是有一些方法可以获得链接层头类型;在任何程序读取pcap文件之前,任何尝试从原始数据包数据中获取任何,必须确定文件中的链接层标题类型,以及它从link-layer header type上的原始数据包数据中提取信息的方式(如果文件没有链接层标题类型,则退出)解析)。
(并随意告诉Oberheide先生,他的代码已被破坏,因为它没有检查链路层标头类型!)
答案 2 :(得分:0)
您尝试做的只能在python REPL shell中运行。当你想要它从python脚本工作时,你需要像这样调用repr
方法:
for ts, buf in pcap:
eth = dpkt.ethernet.Ethernet(buf)
print repr(eth) # this is key
以太网(src ='\ x00 \ x1a \ xa0kUf',dst ='\ x00 \ x13I \ xae \ x84,',data = IP(src ='\ xc0 \ xa8 \ n \ n',off = 16384 ,dst ='C \ x17 \ x030',sum = 25129, len = 52,p = 6,id = 51105,data = TCP(seq = 9632694,off_x2 = 128, ack = 3382015884,win = 54,sum = 65372,flags = 17,dport = 80,sport = 56145)))
我假设您有一个具有正确以太网数据包的pcap,并且您已经检查过像链路层一样。