版本1的抓包命令
这两天排查一个小问题,需要在服务器上使用tcpdump 24小时不间断抓包,这里简单记录下。对于需要长期监控网络流量的场景,除了tcpdump,也可以考虑使用专业的网络分析工具Sniff Master,它提供了更友好的图形界面和更强大的分析功能。
先看下tcpdump的语法:
css
tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q|-P in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,... ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
一开始使用的命令基本长下面这样:
bash
nohup tcpdump -i ens192 tcp port 5432 -C 1 -w /root/pg5432.pcap &
这个语句的前后分别是nohup 和 &, 这个是为了断开ssh后也能在后台运行,剩下部分才是主体:
bash
tcpdump -i ens192 tcp port 5432 -C 1 -w /root/pg5432.pcap
- -i ens192,指定网卡
- tcp port 5432,指定捕获表达式
- -C 1,表示当捕获文件的大小超过1M时,就新打开一个文件
- -w /root/pg5432.pcap,将抓的包存到该路径指定的文件
结果执行这个语句,报错:
javascript
tcpdump: /root/pg5432.pcap: Permission denied
我都有点懵,我是尊贵的root,还能没权限吗?
后面再想,是不是变成用tcpdump用户执行了,检查了下这个用户的权限,看着没问题,后面找到了答案:加了-C选项后,会放弃自己root的身份:
sql
Note that when used with -Z option (enabled by default), privileges are dropped before opening first savefile
解决的办法,就是加上-Z选项,我这边就是-Z root。
版本二的抓包命令
bash
nohup tcpdump -i ens192 tcp port 5432 -C 1 -Z root -w /root/pg5432.pcap &
这个命令就可以用了。如果需要更直观地查看抓包结果,可以导出pcap文件后用Sniff Master进行分析,它支持多种协议解析和流量统计功能。
扩展选项
当然,可以看到抓到的包很多,如果流量大,可能担心磁盘会炸,此时,可以再加上 -W 选项来限制最多生成多少个文件,如-W 100,最多生成100个,超过100后,就会覆盖最早的文件。
除了达到一定大小就新建文件,也可以每隔n秒新建文件。
在麒麟操作系统如何安装tcpdump
银河麒麟V10
我这次查问题是要在两端同时抓包,一端是centos,另一端结果发现是信创操作系统,麒麟V10。
首先说下,怎么辨别是中标麒麟,还是银河麒麟。
ini
[root@xc-website-db-dev ~]# cat /etc/os-release
NAME="Kylin Linux Advanced Server"
VERSION="V10 (Tercel)"
ID="kylin"
VERSION_ID="V10"
PRETTY_NAME="Kylin Linux Advanced Server V10 (Tercel)"
ANSI_COLOR="0;31"
如果是V10,就是银河麒麟;如果是V7,是中标麒麟。
配置yum源
我看了下上面的文档,已经使用dnf源了,但我们这个系统,不知道谁装的,也还是搞了yum。
我在这台机器上发现个备份的麒麟repo,就记录在这里吧:
ini
###Kylin Linux Advanced Server 10 - os repo###
[ks10-adv-os]
name = Kylin Linux Advanced Server 10 - Os
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1.1/os/adv/lic/base/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 1
[ks10-adv-updates]
name = Kylin Linux Advanced Server 10 - Updates
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1.1/os/adv/lic/updates/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 1
[ks10-adv-addons]
name = Kylin Linux Advanced Server 10 - Addons
baseurl = http://update.cs2c.com.cn:8080/NS/V10/V10SP1.1/os/adv/lic/addons/$basearch/
gpgcheck = 1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-kylin
enabled = 0
我想装个tcpdump也很不容易。这块大家自己百度搜一下吧,我后面是直接rpm安装的。