在linux上tshark怎么过滤

在linux上tshark怎么过滤,第1张

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

tshark使用-R来过滤已捕捉到的包,与界面板wireshark的左上角Filter一致

举个栗子

抓Mysql包命令如下:

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

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

过滤HTTP请求:

# tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R 'http.request.method == "GET" || http.request.method == "HEAD"'

背景:把mysql换成mysqli时出现,连接数过多,其实际上并不是,原因是我挪动了一下php的sock文件位置导致,因这几个socket修改没有修改完全,于是出现了too

many

connections

,从mysql里show

processlist并没有发现真的有连接,其实用tshark抓下包估计能看到(http://justwinit.cn/post/7458/),并没有发出请求,而估计是mysqli的客户端自己报出来的,别看这个问题小,搞了老半天,都想重新安装Php了,发现原来是路径写错了同时mysqli的客户端提示连接数过多的误提示导致方向走错了。如下:

[root@iZ25z0ugwgtZ

etc]#

grep

-r

"mysql.sock"

./

./php.ini:pdo_mysql.default_socket=/data/runsock/mysqlsock/mysql.sock

./php.ini:mysql.default_socket

=

/tmp/mysql.sock

./php.ini:mysql.default_socket

=

/data/runsock/mysqlsock/mysql.sock

./php.ini:mysqli.default_socket

=

/data/runsock/mysql.sock

//这个位置被挪动到,/data/runsock/mysqlsock/mysql.sock导致。

修改后记得重启动php-fpm:

[root@iZ25z0ugwgtZ

etc]#

service

php-fpm

restart

Gracefully

shutting

down

php-fpm

.

done

Starting

php-fpm

done

______________________排查要点如下_______________________________

warning:

mysqli::real_connect():

(hy000/1040):

too

many

connections

in:

出现场景

:手动编译安装mysql,并制定安装位置,php以localhost方式连接mysql

原因分析

:手动编译安装制定位置后所有的mysql文件都在制定的目录或者data目录下面,php默认只会寻找/temp/mysql.sock找这个sock文件,所以会导致sock文件无法找到。

解决方法

1.给sock文件做个软链

ln

-s

/data/mysqldb/mysql.sock

/tmp/mysql.sock

或者

2.修改php的默认mysql.sock连接地址

mysql.default_socket=/data/mysqldb/mysql.sock

3.使用tcp

socket的方式进行连接

mysql('127.0.0.1','username','passwod')

下面给大家介绍PHP

mysql_connect()

函数

定义和用法

mysql_connect()

函数打开非持久的

MySQL

连接。

语法

mysql_connect(server,user,pwd,newlink,clientflag)

参数

描述

server

可选。规定要连接的服务器。

可以包括端口号,例如

"hostname:port",或者到本地套接字的路径,例如对于

localhost

":/path/to/socket"。

如果

PHP

指令

mysql.default_host

未定义(默认情况),则默认值是

'localhost:3306'。

user

可选。用户名。默认值是服务器进程所有者的用户名。

pwd

可选。密码。默认值是空密码。

newlink

可选。如果用同样的参数第二次调用

mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数

new_link

改变此行为并使

mysql_connect()

总是打开新的连接,甚至当

mysql_connect()

曾在前面被用同样的参数调用过。

clientflag

可选。client_flags

参数可以是以下常量的组合:

MYSQL_CLIENT_SSL

-

使用

SSL

加密

MYSQL_CLIENT_COMPRESS

-

使用压缩协议

MYSQL_CLIENT_IGNORE_SPACE

-

允许函数名后的间隔

MYSQL_CLIENT_INTERACTIVE

-

允许关闭连接之前的交互超时非活动时间

返回值

如果成功,则返回一个

MySQL

连接标识,失败则返回

FALSE。

提示和注释

注释:脚本一结束,到服务器的连接就被关闭,除非之前已经明确调用

mysql_close()

关闭了。

提示:要创建一个持久连接,请使用

mysql_pconnect()

函数。

例子

<?php

$con

=

mysql_connect("localhost","mysql_user","mysql_pwd")

if

(!$con)

{

die('Could

not

connect:

'

.

mysql_error())

}

//

一些代码...

mysql_close($con)

?>

流量回溯系统捕获和分析数据流程,一般由以下几个步骤组成:

1.数据包捕获 -记录网络上的数据包流量。

2.协议解析 -解析不同的网络协议和字段

3.搜索和可视化 -详细或汇总浏览数据。

从 Wireshark 3.0.0rc1 开始,TShark可以使用 -G elastic-mapping 选项,生成Elasticsearch映射文件,存储在Elasticsearch中并进行浏览,使得TShark解析结果可以在在Kibana中进行搜索和可视化。

下面,我将展示如何使用Wireshark和Elastic Stack来建立流量回溯系统:

Packetbeat 可以配置为捕获实时网络数据包,并使用 -I 选项从捕获文件中读取数据包。它可以识别和解析许多应用程序级协议,例如HTTP,MySQL和DNS,以及常规流信息。但packetbeat对报文采用会话方式分析,不能对一个个报文单独分析,倾向于应用层,对网络层面分析不足,并且支持的协议有限,tshark的2000多种存在明显差距。

Wireshark是最受欢迎的数据包捕获和分析软件,它可以识别 2,000多个协议,其中包含200,000多个字段 。除GUI界面 *** 作外,它还提供命令行实用程序 tshark 来捕获实时流量以及读取和解析捕获文件。作为其输出, tshark 可以生成报告和统计信息,还可以分析不同文本格式的数据包数据。

自2.2版( 2016年9月发布 )以来, tshark 支持的 Elasticsearch Bulk API 的JSON格式输出。

将在 eth0 网络接口上实时捕获数据包,并以Elasticsearch Bulk API格式输出到文件 packets.json 。

将从捕获文件 capture.pcap 中读取数据包,并作为JSON格式输出为Elasticsearch Bulk API格式到文件 packets.json 。

将从捕获文件 capture.pcap 中读取数据包,过滤HTTP协议指定字段,并作为JSON格式输出为Elasticsearch Bulk API格式到文件 packets.json 。

将从捕获文件 capture.pcap 中读取数据包,过滤HTTP协议指定字段,并增加"|"分隔符以txt格式输出到文件 packets.txt 。

从5.0版开始,Elasticsearch提出了Ingest Pipeline的概念。一个pipeline 由一系列线程组成,这些可以对数据进行许多不同的更改。

Pipeline示例如下:

该Pipeline只是简单更改数据包将被写入的Elasticsearch索引(默认值为 packets-YYYY-MM-DD )。要在导入数据时使用此管道,请在URL中指定它:

有关更多信息,请参见 Ingest模块文档 和新的摄取方式- 第1 部分 , 第2部分 。

Filebeat和Logstash都有等效的配置选项,用于在将数据发送到Elasticsearch时指定接收Pipeline。

Logstash是Elastic Stack的一部分,并用作数据处理线程。它可以用来读取Elasticsearch Bulk API格式的数据,并在将数据发送到Elasticsearch之前对数据执行更复杂的转换和充实。

配置示例为:

logstash.conf

grok过滤器从,格式为“ protocol:protocol:protocol ”的 frame_frame_protocols 字段(例如“ eth:ethertype:ip:tcp:http ” )中提取最内层的网络协议名称,到顶级“ protocol ”字段中。

Wireshark解析的原始数据包含大量字段,这些字段种绝大多数不会搜索或汇总,因此在所有这些字段上创建索引通常不是正确的选择。

字段太多会降低索引和查询速度, Elasticsearch 5.5开始,默认会将索引中的字段数限制为1000 。另外, tshark -T ek 无论原始数据字段值是文本还是数字,包括时间戳和IP地址,均输出为字符串。

如果要指定正确的数据类型,将数字索引为数字,将时间戳作为时间戳等,防止索引字段激增,应显式指定Elasticsearch映射。

Elasticsearch映射例子如下:

要将 tshark -T ek 的输出数据导入到Elasticsearch中,有以下几种方式。

Filebeat非常轻巧,可以监视一组文件或目录中是否有任何新文件,并自动对其进行处理。读取Tshark输出文件并将数据包数据发送到Elasticsearch。

示例配置如下所示:

filebeat.yml

与Filebeat一样,Logstash可以监视目录中的新文件并自动对其进行处理。与Filebeat相比,它比Elasticsearch Ingest Pipeline可以更广泛地转换数据。

有关Logstash配置的示例,请参见3.1转换数据的部分。

在Kibana中,您现在可以浏览数据包并在它们之上构建仪表板。

*网络数据详细视图,包括一个表格,该表格在可扩展的行中显示原始数据包数据

*显示网络协议分布的饼图

由于来自Wireshark的网络数据具有与syslog等不同的数据格式,因此更改Kibana中的某些设置(“管理”选项卡->“ Kibana高级设置”)很有意义。

Kibana配置如下:

参考


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7385413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存