我可以使用TCP转储来获取数据包的主机/域/ IP和端口,以便PHP可以轻松解析它吗?

时间:2014-01-17 18:16:21

标签: linux tcpdump

我正在尝试从tcp dump收集主机名/ ip和端口。

我有点接近使用:

 -s 0 -A -q 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

但它包含太多垃圾,我没有看到解析它的逻辑方法:

18:04:26.935060 IP 51.234.18.40.60495 > 74.125.226.201.80: tcp 664
E...>)@.@...3..(J}...O.Pqc.y.rs......h.....
.......UGET /embed/QobxnFYhMos HTTP/1.1

Host: www.youtube.com

Connection: keep-alive

Referer: http://www.businessinsider.com/fake-house-pumping-stations-2014-1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

x-wap-profile: http://device.sprintpcs.com/Samsung/SPH-L710/MK3.rdf

User-Agent: Mozilla/5.0 (Linux; U; Android 4.3; en-us; SPH-L710 Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Accept-Encoding: gzip,deflate

Accept-Language: en-US

Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7

Cookie: VISITOR_INFO1_LIVE=lFsDZ5g6OfM; YSC=Ofbb0cz2kXU; PREF=fms1=10000&fms2=10000&f1=50000000&fv=0.0.0

1 个答案:

答案 0 :(得分:0)

这里困扰的是,通过将snaplength设置为0(-s 0),您实际上将其设置为默认值65535.这就是您获取捕获所有内容的原因。

来自man tcpdump:

-s Snarf snaplen每个数据包的数据字节而不是默认的65535字节。由于快照有限而被截断的数据包在输出中用``[| proto]''表示,其中proto是发生截断的协议级别的名称。请注意,拍摄较大的快照会增加处理数据包所需的时间,并有效地减少数据包缓冲量。这可能会导致数据包丢失。您应该将snaplen限制为捕获您感兴趣的协议信息的最小数字。将snaplen设置为0会将其设置为默认值65535,以便向后兼容最新版本的tcpdump 。 / em>的

尝试降低该值,您应该为每个数据包获得一个整齐的输出行,可以轻松解析IP地址和具有任何正则表达式函数的端口,无论是php还是其他。

编辑:忘了说你可能想尝试以snaplength值96开始。我认为这是默认值......如果是,你可能想要完全忽略选项。然后你可以根据它的工作方式向上或向下移动。