zoukankan      html  css  js  c++  java
  • linux命令netstat

    写在前面:参考如下链接

    https://www.cnblogs.com/xieshengsen/p/6618993.html
    https://blog.csdn.net/u011552404/article/details/51130936

    netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
    语法选项
    netstat [选项]
    -a或--all:显示所有连线中的Socket;
    -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
    -c或--continuous:持续列出网络状态;
    -C或--cache:显示路由器配置的快取信息;
    -e或--extend:显示网络其他相关信息;
    -F或--fib:显示FIB;
    -g或--groups:显示多重广播功能群组组员名单;
    -h或--help:在线帮助;
    -i或--interfaces:显示网络界面信息表单;
    -l或--listening:显示监控中的服务器的Socket;
    -M或--masquerade:显示伪装的网络连线;
    -n或--numeric:直接使用ip地址,而不通过域名服务器;
    --n 以网络IP地址代替名称,显示网络连接情形
    -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
    -o或--timers:显示计时器;
    -p或--programs:显示正在使用Socket的程序识别码和程序名称;
    -r或--route:显示Routing Table;
    -s或--statistice:显示网络工作信息统计表;
    -t或--tcp:显示TCP传输协议的连线状况;
    -u或--udp:显示UDP传输协议的连线状况;
    -v或--verbose:显示指令执行过程;
    -V或--version:显示版本信息;
    -w或--raw:显示RAW传输协议的连线状况;
    -x或--unix:此参数的效果和指定"-A unix"参数相同;
    --ip或--inet:此参数的效果和指定"-A inet"参数相同。
    例子
    1)列出所有端口情况
    [root@xiesshavip002 ~]# netstat -a # 列出所有端口

    [root@xiesshavip002 ~]# netstat -at # 列出所有TCP端口

    [root@xiesshavip002 ~]# netstat -au # 列出所有UDP端口
    2)列出所有处于监听状态的 Sockets
    [root@xiesshavip002 ~]# netstat -l # 只显示监听端口

    [root@xiesshavip002 ~]# netstat -lt # 显示监听TCP端口

    [root@xiesshavip002 ~]# netstat -lu # 显示监听UDP端口

    [root@xiesshavip002 ~]# netstat -lx # 显示监听UNIX端口
    3)显示每个协议的统计信息
    [root@xiesshavip002 ~]# netstat -s # 显示所有端口的统计信息

    [root@xiesshavip002 ~]# netstat -st # 显示所有TCP的统计信息

    [root@xiesshavip002 ~]# netstat -su # 显示所有UDP的统计信息
    4)显示 PID 和进程名称
    [root@xiesshavip002 ~]# netstat -p
    5)显示核心路由信息
    [root@xiesshavip002 ~]# netstat -r
    #route

    [root@xiesshavip002 ~]# netstat -rn # number显示数字格式,不查询主机名称

    6)查看端口和服务
    [root@xiesshavip002 ~]# netstat -antp | grep ssh

    [root@xiesshavip002 ~]# netstat -antp | grep 22

    命令返回结果解析
    netstat命令一般用来查看IP/Port占用情况,在网络程序员那里就可以用于检测数据发送/接收的端口是否正确。比如最近在做“视频实时传输”项目时就是用它发现问题的。所以有必要看懂netstat命令输出结果的含义,下面给出三个典型的结果:

    说明:Tserver01为一个UDP服务器测试程序,用于接收客户端的请求数据,然后回传另一组数据到客户端。
    UDP ——传输协议为UDP协议
    0.0.0.0:1234 ——本地IP/Port信息。
    其中0.0.0.0有两种解释:
    1、0.0.0.0代表本机上可用的任意地址。 比如0.0.0.0:1234表示本机上所有地址的1234端口,这样多ip计算机就不用重复显示了。
    2、0.0.0.0为默认路由,即要到达不在路由表里面的网段的包都走0.0.0.0这条规则。
    其实,我们可以“通用”理解为代表“本机地址”,1234在程序中体现为绑定的1234端口号
    0.0.0.0:*——目的地址IP/Port信息。
    其中0.0.0.0:*依然有两种解释:
    1、此程序只作了绑定套接字操作,没有发送数据到目的地址,也就是没有目的地址。(此时可以是客户端已经发起并建立了与本服务器的通讯,也可以是客户端没有开启。总之是服务器没有向外部发出数据)
    2、有目的地址,且发送了数据,但是由于是UDP传输,没有用connect函数建立两端连接。
    而作为此测试程序就是:采用UDP协议,并在回传数据时采用了connect绑定客户端地址,但是客户端并没有开启,导致并没有建立连接。

    由上述的知识,可以直接得到如下信息:
    解释:
    Tserver01程序采用UDP协议传输数据,绑定本地115.28.183.194:1234地址信息,并调用connect函数绑定目的地址221.212.116.50:9781建立了本地—>目的的连接。(至于是否发送数据并不知晓)

    注释:
    videoserver程序绑定本地套接字接受客户端X的连接(0.0.0.0:1234—>0.0.0.0:*),同时绑定了另一个套接字(IP/Port),并调用connnect函数与客户端Y建立连接并通信(X 和Y可以是同一个客户端)。
    (PS:程序问题也就是在这里发现的,我们明明通过客户端2与服务器建立端口号是1234的NAT穿透,但是实际程序却用另一个没有被“穿透的”44268随机端口向客户端2发送数据,导致数据传输到内网后被丢弃。)

    此命令此时简单的做一下本地/目的地址间是否正确的测试,而且是本地—>目的的单向测试,即目的客户端是否向本地服务器发起了连接是看不出来的(需要在客户端运行的主机进行测试。)如果需要更为详细的数据发送问题的测试,可以运行tcpdump命令进行抓包查看。推荐博客:http://blog.chinaunix.net/uid-11140746-id-2903933.html

    LISTEN  监听来自远方的TCP端口的连接请求
    SYN-SENT  在发送连接请求后等待匹配的连接请求
    SYN-RECEIVED  在收到和发送一个连接请求后等待对方对连接请求的确认
    ESTABLISHED  代表一个打开的连接
    TIME-WAIT  等待足够的时间以确保远程TCP接收到连接中断请求的确认
    CLOSED  没有任何连接状态
    CLOSED-WAIT  等待从本地用户发来的连接中断请求

  • 相关阅读:
    Dubbo 节点telnet测试
    node.js 文件下载
    node.js获取ip及mac
    excel中根据A列筛选B列填充C列
    django在读取数据库时未筛选到符合条件的记录会报错
    django分页功能
    django中命令行调试程序
    Python中if-else的多种写法
    python自定义函数的参数之四种表现形式
    python类变量和实例变量的区别
  • 原文地址:https://www.cnblogs.com/move-on-change/p/9517781.html
Copyright © 2011-2022 走看看