scapy没有在非标准端口上获取HTTP请求

时间:2017-07-03 08:21:02

标签: python scapy packet-sniffers

我正在尝试获取所有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')),
]

0 个答案:

没有答案