2013-04-17 221 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... 
相關問題