• linux系统常用网络分析命令

    发布时间:2021-02-26 16:48:23
    作者:ynkulusi
  • linux常用网络分析命令
    netstat命令:
    -r: 显示路由表
    -n: 以数字方式显示
    -t: 建立的tcp连接
    -u: 显示udp连接
    -l: 显示监听状态的连接
    -p: 显示监听指定的套接字的进程的进程号及进程名
    netstat -t       #查看当前已经建立的tcp连接
    netstat -antp        #查看所有已经建立的tcp连接
    netstat -tupl     #查看所有监听的tcpudp及进程名信息(udp不能监听,但可以查看是否在占用)
    netstat -s          #查看网络连接信息
    netstat -i        #查看网卡接口信息
    netstat -tulnp |grep nginx   #查看nginx服务的网络信息

    nc命令是一个功能强大的网络工具,通过它不仅可以探测端口,还能作为客户端连接服务。
    语法及参数
    语法
    nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v...][-w<超时秒数>][主机名称][通信端口...]
    参数
    -g<网关> 设置路由器跃程通信网关,最多可设置8个。
    -G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
    -h 在线帮助。
    -i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
    -l 使用监听模式,管控传入的资料。
    -n 直接使用IP地址,而不通过域名服务器。
    -o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
    -p<通信端口> 设置本地主机使用的通信端口。
    -r <端口>指定本地与远端主机的通信端口。
    -s<来源位址> 设置本地主机送出数据包的IP地址。
    -u 使用UDP传输协议。
    -v 详细输出--用两个-v可得到更详细的内容
    -w<超时秒数> 设置等待连线的时间。
    -z 使用0输入/输出模式,只在扫描通信端口时使用。

    nc -z 192.168.5.70 1-100   #扫描192.168.5.701-100端口是开放,还可以加-v-n参数
    nc -l 9999  #建立一个本地9999端口的监听服务,另开一个终端用 nc 127.0.0.1 9999telnet登录,输入信息在服务端可以看到,服务器会直接输出这些信息到控制台。
    # nc -l 9999   #开启9999端口监听服务,下面是控制台输出内容,控制台输入内容也会在连接端显示
    hello
    bye!
    # nc 127.0.0.1 9999   #连接本地9999端口,输入下面内容,会在控制台输出,telnet不能会话
    hello
    bye!
    传输文件
    在服务器端,我们开启一个服务器对一个端口进行监听,并且将输出的信息重定向到一个目标文件
    # nc -l 9999 > target_file
    然后客户端找到要传输的文件source_file
    # cat source_file | nc localhost 9999
    传输完成之后,就可以看到服务器自动停止了。然后去找下目标文件 就已经在那里了.
    # nc -l 1567 < file.txt   #服务端
    # nc -n 172.31.100.7 1567 > file.txt   #客户端
    这里我们创建了一个服务端并且重定向netcat的输入为文件file.txt,那么当任何客户端成功连接到该端口,netcat会发送file的文件内容,telnet客户端连接也可以看到文件内容。
    客户端超时控制 是增加一个-w选项例:
    # nc -w 10 localhost 9999
    10秒内没有任何操作就会被自动断开,但是在10秒内你做了任何操作,都可以再续10秒。
    强制netcat服务器端保持启动状态:
    如果跟着做了上面实验的话就会发现一个问题,当客户端推出之后,服务器端也会立即跟着退出。除了那个文件传输的例子以外我们不希望任何一个服务器会在客户端退出之后就立即结束服务,所以我们需要让服务器一直保持服务,但不能同时有多个客户端连接,否则只有第一个连接能会话。
    # nc -k -l 9999

    lsoflist open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
    使用参数-d可以筛选FD列的结果,使用参数-a表示逻辑与运算符AND,如果不使用-a,在默认情况下,每个参数之间的关系是OR.
    各列解释:每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。
    lsof输出各列信息的意义如下:
    COMMAND:进程的名称
    PID:进程标识符
    USER:进程所有者
    FD:文件描述符,应用程序通过文件描述符识别该文件。如cwdtxt
    TYPE:文件类型,如DIRREG
    DEVICE:指定磁盘的名称
    SIZE:文件的大小
    NODE:索引节点(文件在磁盘上的标识)
    NAME:打开文件的确切名称
    常用的参数列表
    lsof filename 显示打开指定文件的所有进程
    lsof -a 表示多个条件都必须满足时才显示结果
    lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
    lsof -u username 显示所属user进程打开的文件
    lsof -g gid 显示归属gid的进程情况
    lsof +d /DIR/ 显示目录下被进程打开的文件
    lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
    lsof -d FD 显示指定文件描述符的进程
    lsof -n 不将IP转换为hostname,缺省是不加上-n参数
    lsof -i 用以显示符合条件的进程情况

    lsof -c init  显示以init进程现在打开的文件
    lsof -p 873 执行PID号为873的命令打开的所有文件、设备、库及套接字等
    lsof -i -a -p 1768   列出进程1768打开所有的网络文件
    lsof -a -u root -d txt    #查看所属root用户进程所打开的文件类型为txt的文件
    lsof -t -u kulusi   #查看用户kulusi所打开的进程ID
    lsof -i tcp lsof -i udp   列出所有 tcpudp 连接
    lsof -i:21-22    #查看占用端口2122的进程信息,或者lsof -i:21,22
    lsof -i:mysql     #查看有关mysql的进程信息
    lsof -i:ftp     #查看所有连接ftp的用户
    lsof -i@192.168.2.88     #查看192.168.2.88的连接信息
    lsof +D /mnt/drbd    #查看/mnt/drbd目录及子目录里被进程正在使用的文件

    ss命令:“ss”表示socket统计。这个命令调查socket,显示类似netstat命令的信息,它可以比其他工具显示更多的TCP和状态信息,netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多,具体用法ss -h ss --help查看。
    ss -nl   #显示本地打开的所有端口,-n以数字形式显示端口
    ss -pl   #显示每个进程具体打开的socket
    ss -t4 -a   #显示所有IPv4版本的tcp socket
    ss -u6 -a   #显示所有IPv6版本的UDP Socekt
    ss -o state established '( dport = :smtp or sport = :smtp )'   #显示所有已建立的SMTP连接
    ss -o state established '( dport = :http or sport = :http )'   #显示所有已建立的HTTP连接
    ss -x src /tmp/.X11-unix/*   #找出所有连接X服务器的进程
    ss -s   #列出当前socket详细信息
    [root@hulusi ~]# ss
    State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port  
    ESTAB      0      0            192.168.2.99:ssh           192.168.2.25:60180  
    ESTAB      0      0            192.168.2.99:40303          58.26.1.106:http 

    tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。
    tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的 FreeBSD系统中,由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
    命令格式
    tcpdump采用命令行方式,它的命令格式为:

    tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]
    1. tcpdump的选项介绍
    -a  将网络地址和广播地址转变成名字;
    -d  将匹配信息包的代码以人们能够理解的汇编格式给出;
    -dd  将匹配信息包的代码以c语言程序段的格式给出;
    -ddd  将匹配信息包的代码以十进制的形式给出;
    -e  在输出行打印出数据链路层的头部信息;
    -f  将外部的Internet地址以数字的形式打印出来;
    -l  使标准输出变为缓冲行形式;
    -n  不把网络地址转换成名字;
    -t  在输出的每一行不打印时间戳;
    -v  输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
    -vv  输出详细的报文信息;
    -c  在收到指定的包的数目后,tcpdump就会停止;
    -F  从指定的文件中读取表达式,忽略其它的表达式;
    -i  指定监听的网络接口;
    -r  从指定的文件中读取包(这些包一般通过-w选项产生);
    -w  直接将包写入文件中,并不分析和打印出来;
    -T  将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单 网络管理协议;)


    tcudump12个命令
    # tcpdump -i eth0   #捕获指定接口的数据包
    # tcpdump -c 5 -i eth0   #捕获指定个数的数据包(5个数据包)
    # tcpdump -A -i eth0    #ASCII码格式输出捕获的数据包
    # tcpdump -D    #显示可用的系统接口
    # tcpdump -XX -i eth0   #用十六进制和ASCII码格式显示捕获的数据包
    # tcpdump -w 001.pcap -i eth0   #把捕获的数据包写入到一个.pcap后缀的文件中
    # tcpdump -r 0001.pcap    #读取捕获数据包文件的内容
    # tcpdump -n -i eth0    #捕获IP地址数据包
    # tcpdump -i eth0 tcp    #捕获TCP端口的数据包
    # tcpdump -i eth0 port 22   #捕获指定端口的数据包
    # tcpdump -i eth0 src 192.168.0.2   #捕获指定源IP的数据包
    # tcpdump -i eth0 dst 50.116.66.139   #捕获指定目的IP的数据包
    # tcpdump -i eth6 dst host 10.0.6.22 and port 6688 -w data.pcap  #抓取指定IP和端口的数据包
    # tcpdump host 192.168.5.70 and 192.168.2.200 -w out &  #后台抓取两主机直接的数据

    mtr命令:我们大多数都熟悉pingtraceroute。那对于把两个命令的功能合二为一的mtr命令呢。
    mtr常用的几个参数
    -v:查看当前版本号
    -r:以报告模式显示,不加-r会动态的显示
    -c:设置每秒发送数据包的数量,默认值是10
    -s:指定ping数据包的大小
    -n:相当于--no-dns 不解析dns 
    #yum install mtr (On Red Hat based Systems)
    现在运行mtr命令,开始动态查看mtr运行的主机和google.com直接的网络连接。
    #mtr google.com
    ynkulusi.com主机发送15个包,不做dns解析,并以报告的形式显示
    # mtr -r -n -c 15 ynkulusi.com
    Start: Fri Feb 26 15:38:13 2021
    HOST: ynkulusi                    Loss%   Snt   Last   Avg  Best  Wrst StDev
      1.|-- 9.193.28.129               0.0%    15    2.9   2.7   2.4   3.7   0.0
      2.|-- 121.4.148.137              0.0%    15    1.4   1.5   1.4   1.6   0.0
    各列数据说明:

    1列:host显示的是IP地址和本机域名,这点和tracert很像
    2列:loss%就是对应IP行的丢包率了,需要注意的是有些丢包是由于icmp的保护机制造成的,并不代表真的丢包
    3列:snt每秒发送数据包的数量,默认值是10,这里通过参数 -c来指定发送15个包
    4列:Last显示的最近一次的返回时延
    5列:Avg是平均值,这个应该是发送ping包的平均时延
    6列:Best是最好或者说时延最短的
    7列:Wrst是最差或者说时延最常
    8列:StDev是标准偏差,统计学名词,一种量度数据分布的分散程度标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少
     
  • 分类:linux
    标签: ss lsof nc tcpdump
    评论数:0 阅读数:2202