我正在尝试使用dpkt模块解析以前捕获的HTTP标头的跟踪:
import dpkt
import sys
f=file(sys.argv[1],"rb")
pcap=dpkt.pcap.Reader(f)
for ts, buf in pcap:
eth=dpkt.ethernet.Ethernet(buf)
ip=eth.data
tcp=ip.data
if tcp.dport==80 and len(tcp.data)>0:
try:
http=dpkt.http.Request(tcp.data)
print http.uri
except:
print 'issue'
continue
f.close()
Run Code Online (Sandbox Code Playgroud)
虽然它似乎有效地解析了大多数数据包,但我收到了一些NeedData("标头的过早结束")异常.它们似乎是WireShark中的有效数据包,所以我对为什么抛出异常感到有点困惑.
一些输出:
/ec/fd/ls/GlinkPing.aspx?IG=4a06eefebcc1495f8f4de7cb41f0ce5c&CID=2265e1228f3451ff8011dcbe5e0cdff7&ID=API.YAds%2C5037.1&1307036510547
issue
issue #misses one packet here, two exceptions
/?ld=4vyO5h1FkjCNjBpThUTGnzF50sB7QUGL0Ok8YefDTWNmO6RXghgDqHXtcp1OqeXATbCAHliIkglLj95-VEwG6ZJN3fblgd3Lh5NvTp4mZPcBGXUyKqXn9FViBAsmt1T96oumpCL5gm7gZ3qlZqSdLNUWjpML_9I8FvB2TLKPSYcJmb_VwwvJhiHpiUIvrjRdzqdVVnuQZVjQmZIIlfaMq0LOmgew_plopjt7hYvOSzBi3VJl4bqOBVk3zdhIvgZK0SfJp3kEWTXAr2_UU_q9KHBpSTnvuhY2W1xo3K2BOHKGk1VAlMiWtWC_nUaJdZmhzzWfb6yRAmY3M9YkUzFGs9z10-70OszkkNpVMSS3-p7xsNXQnC3Zpaxks
感谢帮助; 也许需要一个替代的图书馆建议.
我正在使用以下函数试图在地图矢量中查找地图元素的键.
Entry* SymTab::lookup(const char* name)
{
for (int i=0;i<table.size();i++) //table is the vector
{
map<const char*, Entry, ltstr>::iterator its= table.at(i).find(name);
if (its != cur.end())
{
Entry* obj = &its->second;
cout<<(*its).first<<endl;
return obj;
}
}
}
Run Code Online (Sandbox Code Playgroud)
该函数正确返回第一个向量索引中的任何项的值(at(0)).但每当我尝试访问第二个索引中的元素时(在(1)处),它就会出现段错误.我确信已正确插入地图并填充在第二个索引处.
有没有人在这看到这个问题?