Linux中tshark(wireshark)抓包工具使用方法详解

  • 格式:pdf
  • 大小:70.51 KB
  • 文档页数:2

Linux中tshark(wireshark)抓包⼯具使⽤⽅法详解

在Linux下,当我们需要抓取⽹络数据包分析时,通常是使⽤tcpdump抓取⽹络raw数据包存到⼀个⽂件,然后下载到本地使⽤wireshark界⾯

⽹络分析⼯具进⾏⽹络包分析。

最近才发现,原来wireshark也提供有Linux命令⾏⼯具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能⼒。下⾯我们以两个实

例来介绍tshark⼯具。

1、安装⽅法

代码如下复制代码

: yum install -y wireshark

: apt-get install -y tshark

2、实时打印当前http请求的url(包括域名)

代码如下复制代码

tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http..uri' -T fields -e http.host -

e http.request.uri -l | tr -d '\t'

下⾯介绍参数含义:

-s 512 :只抓取前512个字节数据

-i eth0 :捕获eth0⽹卡

-n :禁⽌⽹络对象名称解析

-f 'tcp dst port 80' :只捕捉协议为tcp,⽬的端⼝为80的数据包

-R 'http.host and http.request.uri' :过滤出http.host和http.request.uri

-T fields -e http.host -e http.request.uri :打印http.host和http.request.uri

-l :输出到标准输出

3、实时打印当前mysql查询语句

tshark -s 512 -i eth0 -n -f 'tcp dst port 3306' -R 'mysql.query' -T fields -e mysql.query

下⾯介绍参数含义:-s 512 :只抓取前512个字节数据

-i eth0 :捕获eth0⽹卡

-n :禁⽌⽹络对象名称解析

-f 'tcp dst port 3306' :只捕捉协议为tcp,⽬的端⼝为3306的数据包

-R 'mysql.query' :过滤出mysql.query

-T fields -e mysql.query :打印mysql查询语句

tshark使⽤-f来指定捕捉包过滤规则,规则与tcpdump⼀样,可以通过命令man pcap-filter来查得。

tshark使⽤-R来过滤已捕捉到的包,与界⾯板wireshark的左上⾓Filter⼀致。

例⼦

代码如下复制代码

std::string decodeHex(const std::string& strHex)

{

int nLen = strHex.length() / 2;

std::string strRet(nLen, 0);

for (int i = 0; i != nLen; ++i)

{

strRet[i] = ((strHex[2*i]>='a') ? (strHex[2*i]-'a'+10) : (strHex[2*i]-'0')) * 16;

strRet[i] += (strHex[2*i+1]>='a') ? (strHex[2*i+1]-'a'+10) : (strHex[2*i+1]-'0');

}

return strRet;

}

void cswuyg_test_tshark()

{

std::wstring strParam = L"\"C:\\Program Files\\Wireshark\\tshark.exe\" -i

1 -p -l -T pdml -f \"dst port 80\" -R \"ip.addr==172.17.195.56\"";

FILE* stream = NULL;

errno_t err = _wfreopen_s(&stream, L"c:\\temp\\cswuyt_test.xml", L"w", stdout);

if (err != 0)

{

std::cout << "error" << std::endl;

}

HANDLE hStd = ::GetStdHandle(STD_OUTPUT_HANDLE);

//BOOL bSet = ::SetHandleInformation(hStd, HANDLE_FLAG_INHERIT,

//BOOL bSet = ::SetHandleInformation(hStd, HANDLE_FLAG_INHERIT,

HANDLE_FLAG_INHERIT);

STARTUPINFO stStartInfo;

ZeroMemory(&stStartInfo, sizeof(STARTUPINFO));

stStartInfo.cb = sizeof(STARTUPINFO);

stStartInfo.hStdError = hStd;

stStartInfo.hStdOutput = hStd;

PROCESS_INFORMATION stProcInfo;

ZeroMemory(&stProcInfo, sizeof(PROCESS_INFORMATION));

BOOL bSuccess = ::CreateProcess(NULL, const_cast(strParam.c_str()),

NULL, NULL, TRUE, 0, NULL, NULL, &stStartInfo, &stProcInfo);

::CloseHandle(stProcInfo.hProcess);

::CloseHandle(stProcInfo.hThread);

::fclose(stream);

}

上边的demo为抓取跟ip地址为172.17.195.56,端⼝为80(http默认端⼝)的机器的通信,tshark会提供包解析之后的xml数据,程序将其存

储到⽂件。注意部分数据是需要由hex字符串转换为真实字符串的,另外还可能会有需要gzip解压。