为什么我的stdout在python中干扰了我的网页?

时间:2012-02-29 22:23:48

标签: python cgi-bin scapy

使用scapy,

启动一个pcap(数据包)的非常简单的代码

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

sendp(a, iface="em1")

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

#!/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>'

如果我查看来源,我会看到 - >&gt;

<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>

3 个答案:

答案 0 :(得分:1)

据我所知,sendp不仅仅是将包回应到stdout;它以较低的协议级别“通过线路”发送它。因此,如果你想发送一个html标题,你需要将它包装在一个包中,而不是相反。

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

答案 1 :(得分:1)

很可能sendp的输出会将HTML显示为文本, 你可以做的是尝试将verbose = 0传递给sendp(如果输出不重要), 或尝试其他详细程度。 如果sendp的输出对您很重要,您可以在单独的脚本中运行它 使用subprocess.Popen并尝试格式化输出,使其适合HTML页面。

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

答案 2 :(得分:0)

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

你应该是因为它是在网络服务器上运行