【发布时间】:2015-07-05 12:41:49
【问题描述】:
我需要创建一个 IP 地址图并标记它们之间的边,我为此编写了下面的代码。 parseOutput() 的内容列表看起来像这样:
('172.16.254.128', '216.58.208.206')
('216.58.208.206', '172.16.254.128')
('172.16.254.128', '216.58.208.226')
('216.58.208.226', '172.16.254.128')
('172.16.254.128', '8.8.8.8')
('8.8.8.8', '172.16.254.128')
('172.16.254.128', '216.58.208.227')
('172.16.254.128', '216.58.208.227')
('216.58.208.227', '172.16.254.128')
('172.16.254.128', '216.58.208.227')
('172.16.254.128', '216.58.208.227')
...
当我运行此代码时,我收到以下错误:
Traceback (most recent call last):
File "test.py", line 40, in <module>
g.add_nodes_from(nodeList)
File "/usr/local/lib/python2.7/dist-packages/networkx/classes/graph.py", line 429, in add_nodes_from
nn,ndict = n
ValueError: need more than 0 values to unpack
import logging, sys, struct, binascii, socket
from scapy.all import *
import networkx as nx
import matplotlib.pyplot as plt
pkts=rdpcap("pcapFile.pcap",20)
def parsePcap():
IPList = [[] for i in range (20)]
count = 0
for pkt in pkts:
#print pkt.summary()
if pkt.haslayer(IP):
#proto = pkt.getLayer(IP).proto
x = pkt.getlayer(IP).src
y = pkt.getlayer(IP).dst
IPList[count]= (x,y)
#IPList[count].append(proto)
print IPList[count]
count += 1
return IPList
parseOutput = parsePcap()
nodeList = parseOutput
edgeList = parseOutput
g = nx.Graph()
g.add_nodes_from(nodeList)
print g.number_of_nodes
g.add_edges_from(edgeList)
pos = nx.spring_layout(g,scale=1) #default to scale=1
nx.draw(g,pos)
我什至不知道我做错了什么。文档并没有说明太多,而且 网上所有的例子似乎都是用和我的代码一样的语法编写的。
【问题讨论】:
-
请显示完整的回溯错误信息。
-
能否提供
parseOutput变量的示例内容?nodeList = parseOutput后跟edgeList = parseOutput在这里看起来很奇怪。 -
我在代码上方显示的 IP 列表是 parseOutput 的确切值
-
@HappyLeapSecond 更新了完整的回溯错误消息
标签: python graph networkx scapy