在 CentOS(以及绝大多数 Linux 发行版) 上,使用 sniffer(抓包工具)通常需要 root 权限,原因如下:
网络抓包需要访问原始套接字(raw socket)
raw sockettcpdump、wireshark、sniff 等)都依赖这个能力需要把网卡设为混杂模式(promiscuous mode)
tcpdump -i eth0
tcpdump: eth0: You don't have permission to capture on that device
dumpcap + setcap(见下文)socket.AF_PACKET、SOCK_RAWsetcap(推荐)给抓包程序赋予 特定权限,而不是全程 root:
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump
之后普通用户也能抓包(前提是程序支持)。
sudo tcpdump -i eth0
sudo usermod -aG wireshark $USER
然后重新登录。
在 CentOS 上,sniffer 抓包几乎一定需要 root 权限,或至少具备
CAP_NET_RAW能力。
如果你愿意,可以告诉我:
我可以给你更精确的配置方案。