Linux下网络抓包工具(ngrep)

做后台开发,经常需要抓取数据包,查看数据流量是否正常,在windows上可以使用Wireshark,是一个网络封包分析软件,使用WinPCAP作为接口,直接与网卡进行数据报文交换。而Linux下使用tcpdump或者ngrep。这里介绍如何使用ngrep。

使用ngrep抓包可以确定数据包是否已经到了某个服务模块,从而定位是哪个部分的问题。

ngrep介绍及安装

ngrep是一个网络抓包工具,可以用来侦听各端口的数据流入和流出。来看看man手册是如何介绍ngrep的:

DESCRIPTION
ngrep strives to provide most of GNU grep's common features, applying them to the network layer.  ngrep is a pcap-aware tool
that  will allow you to specify extended regular expressions to match against data payloads of packets.  It currently recog‐
nizes TCP, UDP and ICMP across Ethernet, PPP, SLIP, FDDI and null interfaces, and understands bpf filter logic in  the  same
fashion as more common packet sniffing tools.

大概的意思:

ngrep努力提供GNU grep的大多数通用功能,并将其应用于网络层。 ngrep是可识别pcap的工具,可让您指定扩展的正则表达式以与数据包的数据有效载荷匹配。 目前,它可以识别以太网,PPP,SLIP,FDDI和空接口上的TCP,UDP和ICMP,并以与更常见的数据包嗅探工具相同的方式理解bpf过滤器逻辑

Centos7安装ngrep

在安装ngrep之前,必须要在自己的设备上安装libpacp

yum install libpcap libpcap-devel -y

由于安装ngrep需用到libpcap库, 所以支持大量的操作系统和网络协议。最后再安装

yum  install  ngrep

安装完之后,输入ngrep来验证下安装是否成功。

在这里插入图片描述

出来这界面表示安装成功。

ngrep选项说明:

-e # 显示空数据包
-i # 忽略大小写
-v # 反转匹配
-x # 以16进制格式显示
-X # 以16进制格式匹配
-w # 整字匹配
-p # 不使用混杂模式
-l #使标准输出行缓冲
-D # 用记录的时间间隔重播pcap_dumps
-t # 在每个匹配的包之前显示时间戳
-T # 显示上一个匹配的数据包之间的时间间隔
-M # 仅进行单行匹配
-I # 从文件中读取数据进行匹配
-O # 将匹配的数据保存到文件
-n # 仅捕获指定数目的数据包进行查看
-A # 匹配到数据包后dump随后的指定数目的数据包
-s # 设置bpf caplen
-S # 在匹配的数据包上设置limitlen
-W # 设置显示格式byline将解析包中的换行符
-c # 强制显示列的宽度
-P #将不可打印的显示字符设置为指定的值
-F # 使用文件中定义的bpf(Berkeley Packet Filter)
-N # 显示由IANA定义的子协议号
-d # 使用哪个网卡,可以用-L选项查询
-L # 查询网卡接口

简单使用

首先我们可以模拟一个请求

curl -s “www.baidu.com”

在这里插入图片描述

监听指定本地网络接口的数据包

ngrep -d ens33

抓包结果:
在这里插入图片描述

可以看到,结果是抓到了www.baidu.com数据流。但是内容没有完整显示出来。ip表示 :183.232.231.172是百度的ip。端口为80

支持换行符

内容要完整显示,其示就是把换行符展示出来。
首先在另一个终端输入请求:

curl -s “www.baidu.com”

然后在另一个终端输入:

ngrep -W byline -d ens33 port 80

这条命令就是用来侦听网页的request和response,注意需要以管理员身份运行.必须是root用户。
抓包结果:
在这里插入图片描述
在这里插入图片描述

W byline是指遇到换行符时换行显示,否则数据是连续的不可读。-d ens33是指侦听ens33网卡。port 80是指侦听80端口。

抓本机网卡与ip

抓本机eth0 与192.168.32.229的通信信息,并且以行来打印出来

ngrep -d ens33 -W byline host 192.168.32.229

抓ssh包

要使用 grep 命令在 Linux 中查找指定服务的默认端口号,只需运行

grep ssh /etc/services

在这里插入图片描述
正如你在上面的输出中所看到的,SSH 服务的默认端口号是 22。

抓包结果:
在这里插入图片描述

正则过滤

上面的包其实太多了,怎么只抓 baidu的包呢,通过 -q 参数。

ngrep -Wbyline -d ens33 -q baidu port 80

在这里插入图片描述

ngrep -Wbyline -d ens33 ‘GET /’ port 80

-d使用哪个网卡,可以用-L选项查询,
在这里插入图片描述

十六进制显示

如果需要具体调试包中的 bytes,想看到 16 进制的数,怎么办呢?只需输入如下命令:

ngrep -x -d ens33 -q baidu port 80

-x 以16进制格式显示。抓包结果:
在这里插入图片描述

总结

ngrep工具是grep命令的网络版,ngrep用于抓包,并可以通过正则表达式,过滤、获取指定样式的数据包。

使用ngrep抓包可以确定数据包是否已经到了某个服务模块,从而定位是哪个部分的问题。

在这里插入图片描述
欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

在这里插入图片描述

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值