Почему мой stdout мешает моей веб-странице в python? - PullRequest
1 голос
/ 01 марта 2012

Действительно простой код, который просто запускает один pcap (пакет), используя scapy,

Если я просто хочу сделать для себя простые 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>'

Если я просматриваю источник, я вижу это ->

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

1 голос
/ 01 марта 2012

Насколько я понимаю, sendp не просто выводит пакет на стандартный вывод;он отправляет его «по проводам» на более низком уровне протокола.Поэтому, если вы хотите отправить HTML-заголовок, вам нужно обернуть его внутри пакета, а не наоборот.

Но вы уверены, что вам нужно возиться со Scapy?Если все, что вам нужно, это отправлять POST-запросы на веб-сервер, вы можете просто использовать urllib2.urlopen.Поместите ваши данные POST в необязательный аргумент data, и он будет использовать POST вместо GET для запроса.

1 голос
/ 01 марта 2012

Скорее всего, вывод sendp тормозит HTML так плохо, что он отображается в виде текста, что вы можете сделать, это попробовать передать verbose = 0 в sendp (если вывод не важен) или попробовать другой подробный уровень.если вывод sendp важен для вас, вы можете запустить его в отдельном скрипте с помощью subprocess.Popen и попытаться отформатировать вывод так, чтобы он соответствовал HTML-странице.

edit: ops, кто-то уже ответил спочти такой же

0 голосов
/ 01 марта 2012

Не похоже, что вы отправляете данные http (например, заголовки ответа).

Вы должны быть, потому что они запускаются с веб-сервера .

...