Linux中tshark(wireshark)抓包工具使用方法详解
2016-05-03 16:56
961 查看
在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析。
最近才发现,原来wireshark也提供有Linux命令行工具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们以两个实例来介绍tshark工具。
1、安装方法
2、实时打印当前http请求的url(包括域名)
下面介绍参数含义:
-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一致。
例子
上边的demo为抓取跟ip地址为172.17.195.56,端口为80(http默认端口)的机器的通信,tshark会提供包解析之后的xml数据,程序将其存储到文件。注意部分数据是需要由hex字符串转换为真实字符串的,另外还可能会有需要gzip解压。
最近才发现,原来wireshark也提供有Linux命令行工具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们以两个实例来介绍tshark工具。
1、安装方法
代码如下 | 复制代码 |
CentOS: yum install -y wireshark Ubuntu: apt-get install -y tshark |
代码如下 | 复制代码 |
tshark -s 512 -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.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, 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<wchar_t*>(strParam.c_str()), NULL, NULL, TRUE, 0, NULL, NULL, &stStartInfo, &stProcInfo); ::CloseHandle(stProcInfo.hProcess); ::CloseHandle(stProcInfo.hThread); ::fclose(stream); } |
相关文章推荐
- Linux ln命令 - 建立文件/目录链接(只看红色部分)
- Linux gdb调试器用法全面解析
- Linux 小工具学习之(1)——Wget十例[翻译]
- 实践一:Linux基础实践
- CentOS安装rar及用法
- linux通过wget直接下载jdk,避免用户验证
- opencv Cross compilation for ARM based Linux systems
- LoadRunner监控Linux资源
- RHEL初接触之本地yum源配置和实验环境
- 图文详解linux如何搭建lamp服务环境
- Linux常用的快捷键
- Linux内核工程导论——进程:ELF文件执行原理(2)
- 【Linux学习笔记六】进程管理
- linux CentOS7.2安装ffmpeg-3.0.2
- Linux上程序执行的入口--main(int argc, char *argv[])
- Linux命令概录
- linux进程调度,优先级、进程nice值
- centos7上安装LAMP
- centos7安装LNMP
- code::blocks 在linux下的安装 全过程