我正在尝试获取所有HTTP GET / POST传入请求。
我发现这个代码看起来很有希望,但我注意到它只适用于标准的HTTP端口。如果我使用另一个端口(比如8080),scapy找不到HTTP层(packet.haslayer(http.HTTPRequest)== False)。
这是代码:
def process_tcp_packet(packet):
msg = list()
try:
if packet.dport == 8983 and packet.haslayer(Raw):
lines = packet.getlayer(Raw).load.split(os.linesep)
# GET or POST requests ?
if lines[0].lower().startswith('get /') or lines[0].lower().startswith('post /'):
# request forwarded by a proxy ?
_ = [line.split()[1] for line in lines if line.startswith('X-Forwarded-For:')]
s_ip = (_[0] if _ else packet.getlayer(IP).src)
# collect info
d_port = packet.getlayer(IP).dport
now = datetime.datetime.now()
msg.append('%s: %s > :%i -> %s' % (now, s_ip, d_port, lines[0]))
except Exception, e:
msg.append('%s: ERROR! %s' % (datetime.datetime.now(), str(e)))
pass
with open('http.log', 'a') as out:
for m in msg:
out.write(m + os.linesep)
对我做错了什么的想法?
****更新****
我摆脱了scapy_http并只看了原始数据。 我在这里发布我正在使用的代码 - 它对我来说很好,因为我正在调试我在Apache Solr上遇到的一个奇怪的问题 - 但你的里程可能会有所不同。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^test/', include('test.urls')),
]