1

非常简单的代码,只使用 scapy 触发一个 pcap(数据包),

如果我只想对自己做简单的 cgi-bin POSTS 来运行一组 10 个简单的测试,为什么这只是作为文本(而不是网站)返回。如果我注释掉该行

sendp(a, iface="em1")

然后下面的代码实际上可以很好地生成网站......但它实际上不会发送数据包,我想这是标准输出的东西......欢迎提出建议!

#!/usr/local/bin/python

from scapy.all import *
#import v6tester_main

print "Content-type:text/html\r\n\r\n"
print '<html>'
print '<head>'
print '<title>NPD Automation Tool - GCT-USG</title>'
print '</head>'
print '<body>'
print '<font> NPD Automation Tool </font>'

a = Ether() / IP() / IPv6() / ICMPv6EchoRequest()
sendp(a, iface="em1")

print '<br>'
print '<font>End of Test</font>'
print '</body>'
print '</html>'

如果我查看源代码,我会看到这个->

<html>
<head>
<title>NPD Automation Tool - GCT-USG</title>
</head>
<body>
<font> NPD Automation Tool </font>

Sent 1 packets.
<br>
<font>End of Test</font>
</body>
</html>
4

3 回答 3

1

据我了解,sendp不只是将包回显到标准输出;它以较低的协议级别将其“通过网络”发送。因此,如果您想发送一个 html 标头,您需要将其包装在一个包中,而不是相反。

但是你确定你需要弄乱scapy吗?如果您只想向网络服务器发送 POST 请求,您可以使用urllib2.urlopen. 将您的 POST 数据放在可选data参数中,它将使用 POST 而不是 GET 请求。

于 2012-02-29T23:40:11.480 回答
1

sendp 的输出最有可能将 HTML 制动得太糟糕,它显示为文本,您可以尝试将 verbose=0 传递给 sendp(如果输出不重要),或尝试其他详细级别。如果 sendp 的输出对您很重要,您可以使用 subprocess.Popen 在单独的脚本中运行它,并尝试格式化输出以使其适合 HTML 页面。

编辑:操作,有人已经回答了几乎相同的问题

于 2012-02-29T23:49:59.673 回答
0

您似乎没有发送 http 数据(例如响应标头)。

您应该是因为它是在 Web 服务器上运行的

于 2012-02-29T23:03:20.600 回答