• NO11 SSH故障排查思路和netstat命令



    本章知识相关考试:
    1、企业场景面试题:Linux系统如何优化?
    2、企业场景面试题:SSH服务连不上,如何排查?记住回答技巧: 1 ping  2 telnet


    客户端ssh工具:SecureCRT,xshell,Putty .
    服务端ssh服务:进程名:sshd,openssh,openssl .

    SSH故障排查思路:
    1、第一步:物理链路是否有问题,比喻为“高速路是否修通”?(客户端执行)
    ping ip            排查客户端到服务端线路问题,ping是常用的网络连通性检查工具。
    tracert -d ip      路由跟踪命令,也可以检查路由是否通畅,-d是不进行反向解析。

    2、第二步:SSH服务是否有问题,比喻为:旅游景点是否开放?(客户端执行)
    telnet ip 22      判断SSH服务器,默认的22端口是否打开?(客户端执行)
                       1 看端口是否打开
                       2 看端口是否改变了
                       3 看防火墙等问题
    nmap ip -p 22     也能达到和telnet相同效果,但nmap仅在Linux中使用。

    3、第三步:是不是防火墙阻挡,比喻:下雪封路,高速路阻挡通行了?(服务端查看)
    /etc/init.d/iptables stop    Linux防火墙iptables,可能好心办坏事,阻挡了远程连接,学习环境建议关掉防火墙,生产环境按需开启。

    远程连接服务:

    1、俩个机器之间是否通畅,看物理网络(网线网卡,IP是不是正确)
    ping ip -t来检测物理网络是否通畅
    192.168.33.127 的回复:具有32字节的数据。
    192.168.33.1   的回复:无法访问目标主机
    不通:
    1、客户端到服务器端物理链路有问题
       网卡,IP,网线,防火墙

    2、服务是否号的
    ssh服务是否是好的
    检测办法:从哪个机器连就在哪个机器上操作
    telnet IP (服务器的IP和PORT)
    telnet 也可以远程连接,因为不是加密的,所以不用了。

    不通可能原因:
    a、服务器防火墙阻挡。Linux解决办法如下:
    [root@localhost ~]# /etc/init.d/iptables stop
    [root@localhost ~]# /etc/init.d/iptables stop
    b、端口没开放,服务器端没有监听你链接的端口
    [root@localhost ~]# netstat -lintup|grep 22 (以ssh服务22端口为例)
    [root@localhost ~]# netstat -lintup|grep sshd
    [root@localhost ~]# /etc/init.d/sshd restart 重启ssh服务。


    netstat命令

    是一个观察网络连接状态的实用工具。 它能检验IP的当前连接状态,在断定你的基本级通信正在进行后,就要验证系统上的服务。这个服务包括检查正在收听输入的通信量和/或验证你正在创建一个与远程站点的会话,它可以很轻松地做到这一点。网上也可以看到很多如X-netstat之类的工具,是WIN界面的,更加直观而已,并没有多什么功能如果要了解某城市信息网络中心节点的出口地址、网关地址、主机地址信息,可使用netstat命令来查询。首先“开始”——"运行"——输入“netstat”, 可看到用户主机采用的协议类型、当前主机与远端相连主机的IP地址及其连接状态键入netstat/?查看netatat命令的用法及参数。
    —R显示本机路由内容
    ——S每个协议的使用状态
    ——N以数字表格形式显示地址和端口
    这个命令的具体用法如下:
    常见参数
    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -l 仅列出有在 Listen (监听) 的服務状态
    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。
    提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

    netstat命令

    简介

    Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。

    输出信息含义

    执行netstat后,其输出结果为

    复制代码
    复制代码
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
    tcp 296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED
    tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED
    tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED
    tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE

    Active UNIX domain sockets (w/o servers)
    Proto RefCnt Flags Type State I-Node Path
    unix 1 [ ] STREAM CONNECTED 16178 @000000dd
    unix 1 [ ] STREAM CONNECTED 16176 @000000dc
    unix 9 [ ] DGRAM 5292 /dev/log
    unix 1 [ ] STREAM CONNECTED 16182 @000000df
    复制代码
    复制代码


    从整体上看,netstat的输出结果可以分为两个部分:

    一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。

    另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
    Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。

    常见参数

    -a (all)显示所有选项,默认不显示LISTEN相关
    -t (tcp)仅显示tcp相关选项
    -u (udp)仅显示udp相关选项
    -n 拒绝显示别名,能显示数字的全部转化成数字。
    -l 仅列出有在 Listen (监听) 的服務状态

    -p 显示建立相关链接的程序名
    -r 显示路由信息,路由表
    -e 显示扩展信息,例如uid等
    -s 按各个协议进行统计
    -c 每隔一个固定时间,执行该netstat命令。

    提示:LISTEN和LISTENING的状态只有用-a或者-l才能看到

    实用命令实例

     

    1. 列出所有端口 (包括监听和未监听的)

      列出所有端口 netstat -a

    复制代码
    复制代码
    # netstat -a | more
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 localhost:30037 *:* LISTEN
    udp 0 0 *:bootpc *:*

    Active UNIX domain sockets (servers and established)
    Proto RefCnt Flags Type State I-Node Path
    unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0
    unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket
    复制代码
    复制代码

      列出所有 tcp 端口 netstat -at

    复制代码
    复制代码
    # netstat -at
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 localhost:30037 *:* LISTEN
    tcp 0 0 localhost:ipp *:* LISTEN
    tcp 0 0 *:smtp *:* LISTEN
    tcp6 0 0 localhost:ipp [::]:* LISTEN
    复制代码
    复制代码

      列出所有 udp 端口 netstat -au

    复制代码
    # netstat -au
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    udp 0 0 *:bootpc *:*
    udp 0 0 *:49119 *:*
    udp 0 0 *:mdns *:*
    复制代码

     

    2. 列出所有处于监听状态的 Sockets

      只显示监听端口 netstat -l

    复制代码
    # netstat -l
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 localhost:ipp *:* LISTEN
    tcp6 0 0 localhost:ipp [::]:* LISTEN
    udp 0 0 *:49119 *:*
    复制代码

      只列出所有监听 tcp 端口 netstat -lt

    复制代码
    # netstat -lt
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 localhost:30037 *:* LISTEN
    tcp 0 0 *:smtp *:* LISTEN
    tcp6 0 0 localhost:ipp [::]:* LISTEN
    复制代码

      只列出所有监听 udp 端口 netstat -lu

    # netstat -lu
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    udp 0 0 *:49119 *:*
    udp 0 0 *:mdns *:*

      只列出所有监听 UNIX 端口 netstat -lx

    复制代码
    复制代码
    # netstat -lx
    Active UNIX domain sockets (only servers)
    Proto RefCnt Flags Type State I-Node Path
    unix 2 [ ACC ] STREAM LISTENING 6294 private/maildrop
    unix 2 [ ACC ] STREAM LISTENING 6203 public/cleanup
    unix 2 [ ACC ] STREAM LISTENING 6302 private/ifmail
    unix 2 [ ACC ] STREAM LISTENING 6306 private/bsmtp
    复制代码
    复制代码


    3. 显示每个协议的统计信息

      显示所有端口的统计信息 netstat -s

    复制代码
    复制代码
    # netstat -s
    Ip:
    11150 total packets received
    1 with invalid addresses
    0 forwarded
    0 incoming packets discarded
    11149 incoming packets delivered
    11635 requests sent out
    Icmp:
    0 ICMP messages received
    0 input ICMP message failed.
    Tcp:
    582 active connections openings
    2 failed connection attempts
    25 connection resets received
    Udp:
    1183 packets received
    4 packets to unknown port received.
    .....
    复制代码
    复制代码

      显示 TCP 或 UDP 端口的统计信息 netstat -st 或 -su

    # netstat -st 
    # netstat -su

     

    4. 在 netstat 输出中显示 PID 和进程名称 netstat -p

    netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

    复制代码
    # netstat -pt
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 1 0 ramesh-laptop.loc:47212 192.168.185.75:www CLOSE_WAIT 2109/firefox
    tcp 0 0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox
    复制代码
    
    

    5. 在 netstat 输出中不显示主机,端口和用户名 (host, port or user)

    当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。

    同样可以加速输出,因为不用进行比对查询。

    # netstat -an

    如果只是不想让这三个名称中的一个被显示,使用以下命令

    # netsat -a --numeric-ports
    # netsat -a --numeric-hosts
    # netsat -a --numeric-users

     

    6. 持续输出 netstat 信息

    netstat 将每隔一秒输出网络信息。

    复制代码
    复制代码
    # netstat -c
    Active Internet connections (w/o servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 ramesh-laptop.loc:36130 101-101-181-225.ama:www ESTABLISHED
    tcp 1 1 ramesh-laptop.loc:52564 101.11.169.230:www CLOSING
    tcp 0 0 ramesh-laptop.loc:43758 server-101-101-43-2:www ESTABLISHED
    tcp 1 1 ramesh-laptop.loc:42367 101.101.34.101:www CLOSING
    ^C
    复制代码
    复制代码

     

    7. 显示系统不支持的地址族 (Address Families)

    netstat --verbose

    在输出的末尾,会有如下的信息

    netstat: no support for `AF IPX' on this system.
    netstat: no support for `AF AX25' on this system.
    netstat: no support for `AF X25' on this system.
    netstat: no support for `AF NETROM' on this system.

     

    8. 显示核心路由信息 netstat -r

    复制代码
    # netstat -r
    Kernel IP routing table
    Destination Gateway Genmask Flags MSS Window irtt Iface
    192.168.1.0 * 255.255.255.0 U 0 0 0 eth2
    link-local * 255.255.0.0 U 0 0 0 eth2
    default 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
    复制代码

    注意: 使用 netstat -rn 显示数字格式,不查询主机名称。

     

    9. 找出程序运行的端口

    并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

    # netstat -ap | grep ssh
    tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT -
    tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -

      找出运行在指定端口的进程

    # netstat -an | grep ':80'

     

    10. 显示网络接口列表

    复制代码
    # netstat -i
    Kernel Interface table
    Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
    eth0 1500 0 0 0 0 0 0 0 0 0 BMU
    eth2 1500 0 26196 0 0 0 26883 6 0 0 BMRU
    lo 16436 0 4 0 0 0 4 0 0 0 LRU
    复制代码

    显示详细信息,像是 ifconfig 使用 netstat -ie:

    复制代码
    复制代码
    # netstat -ie
    Kernel Interface table
    eth0 Link encap:Ethernet HWaddr 00:10:40:11:11:11
    UP BROADCAST MULTICAST MTU:1500 Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
    Memory:f6ae0000-f6b00000
    复制代码
    复制代码
    
    

     

    11. IP和TCP分析

      查看连接某服务端口最多的的IP地址

    复制代码
    复制代码
    wss8848@ubuntu:~$ netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
    18 221.136.168.36
    3 154.74.45.242
    2 78.173.31.236
    2 62.183.207.98
    2 192.168.1.14
    2 182.48.111.215
    2 124.193.219.34
    2 119.145.41.2
    2 114.255.41.30
    1 75.102.11.99
    复制代码
    复制代码

      TCP各种状态列表

    复制代码
    复制代码
    wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'
    established)
    Foreign
    LISTEN
    TIME_WAIT
    ESTABLISHED
    TIME_WAIT
    SYN_SENT
    复制代码
    复制代码
      先把状态全都取出来,然后使用uniq -c统计,之后再进行排序。
    复制代码
    复制代码
    wss8848@ubuntu:~$ netstat -nat |awk '{print $6}'|sort|uniq -c
    143 ESTABLISHED
    1 FIN_WAIT1
    1 Foreign
    1 LAST_ACK
    36 LISTEN
    6 SYN_SENT
    113 TIME_WAIT
    1 established)
    复制代码
    复制代码
      最后的命令如下:
    netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
    分析access.log获得访问前10位的ip地址
    awk '{print $1}' access.log |sort|uniq -c|sort -nr|head -10
    
    

    参考资料:http://blog.maxiang.net/10-netstat-command-examples/139/

                http://www.ipcpu.com/2011/07/netstat-linux/

      

  • 相关阅读:
    Java实现 LeetCode 416 分割等和子集
    Java实现 LeetCode 416 分割等和子集
    在Linux运行期间升级Linux系统(Uboot+kernel+Rootfs)
    【详解】嵌入式开发中固件的烧录方式
    嵌入式系统烧写uboot/bootloader/kernel的一般方法
    Linux下USB烧写uImage kernel
    Xmanager连接CentOS的远程桌面
    命令行利器Tmux
    u-boot中分区和内核MTD分区关系
    uboot环境变量与内核MTD分区关系
  • 原文地址:https://www.cnblogs.com/sinsenliu/p/8963900.html
Copyright © 2020-2023  润新知