【发布时间】:2014-11-17 23:53:32
【问题描述】:
我正在尝试检查捕获的数据包文件的位置。如果我在 ubuntu 中运行它,它工作得非常好,但是如果我每次遇到 IPv6 数据包时切换并在 Windows 中运行它,它就会停止。我希望它只是跳过它并像在 ubuntu 中那样继续下一个数据包,但事实并非如此。只要遇到 v6 IP addy,它就会停止 for 循环。
任何想法如何解决这个问题?
def printPcap(pcap):
for (ts, buf) in pcap:
try:
eth = dpkt.ethernet.Ethernet(buf)
ip = eth.data
src = socket.inet_ntoa(ip.src)
dst = socket.inet_ntoa(ip.dst)
print '[+] Src: ' + src + ' --> Dst: ' + dst
print '[+] Src: ' + retGeoStr(src) + ' --> Dst: ' + retGeoStr(dst) + '\n'
except:
pass
如果我打印出异常捕获的错误,它将打印:
inet_ntoa 的数据包 IP 长度错误
我很确定这是因为它是 IPv6,然后我希望它继续到下一个数据包,但它也会打印出这个错误:
'str' 对象没有属性 'src'
我认为这是导致我的问题的原因。
就像我说的那样,它可以正常工作,直到它到达 v6 地址并且它在 ubuntu 上工作正常。我很困惑。
【问题讨论】:
-
printvariables 看看你到底得到了什么 - 也许它可以帮助你找到解决方案。 -
永远不要使用
except来捕获所有异常......尤其是在调试时。 -
+1 @furas,具体来说:
print ip -
dpkt.ethernet.Ethernet.get_type 可能值得一看。