1

我正在使用 linux pc 并安装了 tshark 。并且必须使用 TCL 脚本在 eth1 接口中捕获数据包。但是 tshark 以 root 模式运行。捕获和运行 pc 的脚本是相同的。如何以 root 身份登录以及如何使用 TCL 运行 tshark 命令?请为此提供解决方案。

#!/usr/bin/tclsh 

set out [exec tshark -V -i eth1 arp -c 1 ]

puts $out

输出

test@test:~$ tclsh pcap.tcl 
Capturing on eth1
tshark: The capture session could not be initiated (eth1: You don't have permission to capture on that device (socket: Operation not permitted)).
Please check to make sure you have sufficient permissions, and that you have the proper interface or pipe specified.
0 packets captured
    while executing
"exec tshark -V -i eth1 arp -c 1 "
    invoked from within
"set out [exec tshark -V -i eth1 arp -c 1 ]"
    (file "pcap.tcl" line 5)
test@test:~$ 
4

2 回答 2

2

请尝试以下步骤并参考此链接http://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/

root@test:/usr/bin# setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
root@test:/usr/bin# getcap /usr/bin/dumpcap
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip
root@test:/usr/bin# exit
exit
test@test:/usr/bin$ tshark -V -i eth1
Capturing on eth1
Frame 1 (60 bytes on wire, 60 bytes captured)
    Arrival Time: Aug  8, 2013 13:54:27.481528000
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
于 2013-08-08T08:37:10.373 回答
1

您必须tshark通过sudo(或任何其他可用方式)提升进程的权限,或者以提升的权限运行整个脚本。

一种可能比sudo需要零定制更简单的方法是编写一个超级简单的C程序,该程序只需/usr/bin/tshark使用必要的参数运行,然后制作该程序setuid root并与您的 Tcl 程序一起分发。仅当您需要可移植性时才需要这样做。否则sudo就简单多了。

于 2013-08-07T14:01:30.010 回答