2013-04-17 154 views
4

在Scapy中,我想比较任意两个数据包ab之间的多个头字段。场的这个列表是预定义的,说:Python:在字符串中通过名称访问结构字段

fieldsToCompare = ['tos', 'id', 'len', 'proto'] #IP header 

通常我会单独做到这一点:

if a[IP].tos == b[IP].tos: 
    ... do stuff... 

有没有办法从字符串列表访问这些数据包字段包括哪些他们中的每一个叫做?像:

for field in fieldsToCompare: 
    if a[IP].field == b[IP].field: 
     ... do stuff... 

回答

10

您可以使用getattr()。这些行是等效的:

getattr(x, 'foobar') 
x.foobar 

setattr()是它的对应物。

2

我认为您正在寻找getattr()。试试...

for field in fieldsToCompare: 
    if getattr(a[IP], field) == getattr(b[IP], field): 
     ... do stuff... 
相关问题