• 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  等待从本地用户发来的连接中断请求

  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/move-on-change/p/9517781.html
Copyright © 2020-2023  润新知