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

小潘seo 重庆小潘seo博客和你一起学习SEO知识,共同分享SEO优化~

tshark(wireshark)抓包工具是一个非常不错的linux中常用的工具,相比GUI工具可以实现一些自动化,譬如把某些关注的数据抓起下来存放到文本中,下面我们一起来看看tshark(wireshark)工具使用例子。

在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析。

最近才发现,原来wireshark也提供有Linux命令行工具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们以两个实例来介绍tshark工具。

1、安装方法,代码如下:

  1. CentOS:yuminstall-ywireshark
  2. Ubuntu:apt-getinstall-ytshark

2、实时打印当前http请求的url(包括域名),代码如下:

  1. tshark-s512-ieth0-n-f'tcpdstport80'-R'http.hostandhttp.request.uri'-Tfields-ehttp.host-ehttp.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一致。

例子代码如下:

  1. std::stringdecodeHex(conststd::string&strHex)
  2. {
  3. intnLen=strHex.length()/2;
  4. std::stringstrRet(nLen,0);
  5. for(inti=0;i!=nLen;++i)
  6. {
  7. strRet[i]=((strHex[2*i]>='a')?(strHex[2*i]-'a'+10):(strHex[2*i]-'0'))*16;
  8. strRet[i]+=(strHex[2*i+1]>='a')?(strHex[2*i+1]-'a'+10):(strHex[2*i+1]-'0');
  9. }
  10. returnstrRet;
  11. }
  12. voidcswuyg_test_tshark()
  13. {
  14. std::wstringstrParam=L"\"C:\\ProgramFiles\\Wireshark\\tshark.exe\"-i1-p-l-Tpdml-f\"dstport80\"-R\"ip.addr==172.17.195.56\"";
  15. FILE*stream=NULL;
  16. errno_terr=_wfreopen_s(&stream,L"c:\\temp\\cswuyt_test.xml",L"w",stdout);
  17. if(err!=0)
  18. {
  19. std::cout<<"error"<<std::endl;
  20. }
  21. HANDLEhStd=::GetStdHandle(STD_OUTPUT_HANDLE);
  22. //BOOLbSet=::SetHandleInformation(hStd,HANDLE_FLAG_INHERIT,HANDLE_FLAG_INHERIT);
  23. STARTUPINFOstStartInfo;
  24. ZeroMemory(&stStartInfo,sizeof(STARTUPINFO));
  25. stStartInfo.cb=sizeof(STARTUPINFO);
  26. stStartInfo.hStdError=hStd;
  27. stStartInfo.hStdOutput=hStd;
  28. PROCESS_INFORMATIONstProcInfo;
  29. ZeroMemory(&stProcInfo,sizeof(PROCESS_INFORMATION));
  30. BOOLbSuccess=::CreateProcess(NULL,const_cast<wchar_t*>(strParam.c_str()),NULL,NULL,TRUE,0,NULL,NULL,&stStartInfo,&stProcInfo);
  31. ::CloseHandle(stProcInfo.hProcess);
  32. ::CloseHandle(stProcInfo.hThread);
  33. ::fclose(stream);--phpfensi.com
  34. }

上边的demo为抓取跟ip地址为172.17.195.56,端口为80(http默认端口)的机器的通信,tshark会提供包解析之后的xml数据,程序将其存储到文件。注意部分数据是需要由hex字符串转换为真实字符串的,另外还可能会有需要gzip解压。

相关广告
  • Linux中tshark(wireshark)抓包工具使用方法详解 Linux中tshark(wireshark)抓包工具使用方法详解 Linux中tshark(wireshark)抓包工具使用方法详解
相关阅读

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

2019/10/10 17:46:55 | 谷歌SEO算法 | 微服务