我正在创建一个图形模型来存储来自nmap扫描的扫描。有一个GraphModel,Vertex和Edge类,NmapDataModel类充当GraphModel的包装器。当我向其中摄取多个IP地址时,它会获取最新的IP和顶点属性并覆盖这些属性,但保留正确的键值(这是使顶点唯一的值的哈希值)。任何帮助将不胜感激...拉我的头发... 主程序。第52行的print语句显示了这个问题。
编辑:我遇到的问题是每个键都是唯一的,但共享图模型中的所有值都使用NmapDataModel.add_ipv4()函数写入的最后一个值。密钥是唯一的,它们是通过获取标签和ipv4地址创建的哈希。
class NmapDataModel(object):
def __init__(self):
self.graphmodel = graph.GraphModel()
def add_ipv4(self, ipAddress, properties={}):
properties['ipv4'] = ipAddress
v = graph.Vertex('IP', properties=properties, unique_by=['ipv4'])
return self.graphmodel.add_vertex(v)
class NmapInterface(object):
def build_model(self, filename=None):
dm = NmapDataModel()
tree = ET.parse(filename)
root = tree.getroot()
for host in root.findall('host'):
ipAddressFromHostStuff = some process that gets the IP there
dm.add_ipv4(ipAddressFromHostStuff)
for item in dm.graphmodel.vertices:
print(item, dm.graphmodel.vertices[item])
return dm.graphmodel
class GraphModel(object):
def __init__(self, graphDict=None):
self.vertices = dict()
self.edges = dict()
def add_vertex(self, vertex):
if(not vertex.id in self.vertices):
self.vertices.update({vertex.id:vertex})
else:
self.vertices[vertex.id].properties.update(vertex.properties)
return self.vertices[vertex.id]
class Vertex(object):
def __init__(self, label, properties={}, unique_by=[]):
self.label = label
id = label
if(unique_by):
for item in unique_by:
id += ':' + str(properties.get(item,'None'))
else:
for item in properties.keys():
id += ':' + str(properties.get(item,'None'))
id = hashlib.md5(id.encode('utf-8')).hexdigest()[0:10]
properties['hashcode'] = id
self.id = id
self.properties = properties
示例输出
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.5', 'hashcode': '192c6e67b6'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.7', 'hashcode': '9a4b1c6c9f'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.7', 'hashcode': '9a4b1c6c9f'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.8', 'hashcode': 'fdb4251f16'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.8', 'hashcode': 'fdb4251f16'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.8', 'hashcode': 'fdb4251f16'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.10', 'hashcode': '6c5d6cc9ec'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.13', 'hashcode': '12284ae326'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.14', 'hashcode': 'b8e17aacb6'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.22', 'hashcode': '8ec5f874b7'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.24', 'hashcode': '635dcc2038'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
c7daaefc8d IP:c7daaefc8d:{'ipv4': '10.11.1.31', 'hashcode': 'c7daaefc8d'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
c7daaefc8d IP:c7daaefc8d:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
53273bad7d IP:53273bad7d:{'ipv4': '10.11.1.35', 'hashcode': '53273bad7d'}
============
192c6e67b6 IP:192c6e67b6:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
9a4b1c6c9f IP:9a4b1c6c9f:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
fdb4251f16 IP:fdb4251f16:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
6c5d6cc9ec IP:6c5d6cc9ec:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
12284ae326 IP:12284ae326:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
b8e17aacb6 IP:b8e17aacb6:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
8ec5f874b7 IP:8ec5f874b7:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
635dcc2038 IP:635dcc2038:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
c7daaefc8d IP:c7daaefc8d:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
53273bad7d IP:53273bad7d:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}
021890997d IP:021890997d:{'ipv4': '10.11.1.39', 'hashcode': '021890997d'}