【问题标题】:tcpdump to only print urlstcpdump 仅打印 url
【发布时间】:2013-07-28 13:12:16
【问题描述】:

有办法吗

tcpdump -i lo -A 

并让它打印所有 url,是否建立了任何连接?

我已经完成了:

sudo tcpdump -i lo -A | grep Host: 

效果很好。但我想知道在 tcpdump 中是否有选项可以做同样的事情

最后,有没有办法在 python 中做到这一点,而无需使用 sys 命令或 Popen/subprocess

【问题讨论】:

  • tcpdump 无法使用包的内容进行过滤,您可以通过只为incoming TCP connections to your HTTP port 转储这些包来提高性能。
  • 另外,由于 HTTP 不会以直接的方式传输请求的 URL,因此从 tcpdump 提要中挑选出来会稍微困难一些 - 您必须结合 Host 标头和 @987654325 @ 或 POST 行以获取完整的 URL...

标签: python tcpdump


【解决方案1】:

tcpdump 不能根据数据包的内容进行过滤(没有深度数据包检查),因为它只使用 pcacp-filter。 你可以通过只为incoming TCP connections to your HTTP port 转储这些包来提高你的性能。

tcpdump -i lo -A tcp port 80

TCPPDUMP python:使用Pcapy

另一种选择是使用tshark

【讨论】:

  • “tcpdump 无法根据数据包的内容进行过滤(无深度数据包检测)”。使用 -vv 可以让您非常接近。
【解决方案2】:

您可以使用 scapy 的嗅探功能并使用正则表达式或 grep

import scapy
tcpdump = sniff(count=5,filter="host 64.233.167.99",prn=lambda x:x.summary())
print tcpdump

更改过滤器文本的过滤器:)

或者也许你想保存流量并在wireshark中查看

wrpcap("temp.cap",pkts)

【讨论】:

  • 是否可以嗅探一段时间而不是给定计数。(开始嗅探)做点什么。 (停止嗅探)另外,重要的是我们在界面 lo 上记录所有内容。
【解决方案3】:

您要使用的是 libpcap,它是 tcpdump 使用的数据包捕获库。有一个 python 包装器可以找到here

您可以在 python 中,在 pcap/tcpdump 已经提供的过滤之上构建您想要的任何过滤。然后显示这个过滤后的输出(或者你想要在你的 python 脚本中做的任何事情)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 2012-01-04
    • 2020-04-02
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2015-12-06
    相关资源
    最近更新 更多