1. Ping

Ping命令一般被用来查看目标IP地址和本机之间的网络是否连通。Ping命令依赖于ICMP协议实现,ICMP数据报的组成如下:

 

 

具体做法是向目标IP发送一个或者ICMP数据报,目标IP地址如果接受到了本机发出的数据报,就会发出响应,如果主机能接受到响应,则代表本机和目标地址之间可以顺利通信。Ping程序会记录ICMP数据报的收发情况进行统计。例如ping一下百度的IP地址(baidu.com)。

   

Ping命令告诉我们,它会持续不断地给目标IP发送ICMP数据报,上面的截图中的每一行代表了一个从ICMP响应的信息,具体包括

  • icmp_seq:ICMP数据包序号,从1开始递增,如果中间不连续代表丢包了。
  • ttl:生存时间,具体指允许数据包之间通过多少个路由器或跳数,数据包每经过一个路由器,ttl会减1,当ttl归零时,这个数据包的生成周期结束,处理它的路由器会丢弃这个数据包。
  • time: 这个数据报的响应时间,时间越短,代表响应速度越快。

然后是统计信息,它告诉我们,一共有13个数据报被传递,全被接收,没有数据包丢失。最后一行是:最小/最大/平均响应时间和本机硬件耗费时间。

Ping命令用法:

 

Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval] [-I interface]
            [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
            [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
            [-w deadline] [-W timeout] [hop1 ...] destination
Usage: ping -6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
             [-l preload] [-m mark] [-M pmtudisc_option]
             [-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
             [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
             [-W timeout] destinatio

2. Telnet

Telnet命令是telnet协议在Linux下的接口,它的作用是远程登录,默认端口是23。telnet首先在本机和目标计算机之间建立可靠的字节流,这样,当我们在本机上敲下命令以后,这些命令被送到远程计算机,在远程计算机下执行,最终将结果送回在本机上显示。要使用telnet命令需要输入远程计算机的用户名和密码。但是,telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。

例如,我们通过telnet远程登录斯坦福大学,向其发送一个HTTP请求,斯坦福大学把HTTP响应返回了回来。

 

telnet命令的另外一个作用是用来检测远程计算机的端口是否对外开放:

 

 

3. netstat

netstat是Linux下基本的网络调试工具,它可以展示网络连接的各种信息。

 

netstat --help
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] }

        -r, --route              display routing table
        -i, --interfaces         display interface table
        -g, --groups             display multicast group memberships
        -s, --statistics         display networking statistics (like SNMP)
        -M, --masquerade         display masqueraded connections

        -v, --verbose            be verbose
        -W, --wide               don't truncate IP addresses
        -n, --numeric            don't resolve names
        --numeric-hosts          don't resolve host names
        --numeric-ports          don't resolve port names
        --numeric-users          don't resolve user names
        -N, --symbolic           resolve hardware names
        -e, --extend             display other/more information
        -p, --programs           display PID/Program name for sockets
        -o, --timers             display timers
        -c, --continuous         continuous listing

        -l, --listening          display listening server sockets
        -a, --all                display all sockets (default: connected)
        -F, --fib                display Forwarding Information Base (default)
        -C, --cache              display routing cache instead of FIB
        -Z, --context            display SELinux security context for sockets

  <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
           {-x|--unix} --ax25 --ipx --netrom
  <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 

 

其中,比较重要的包括:

  • 列出所有链接和监听端口

 

           netstat -a参数的输出包括两部分,第一部分是Active Internet connections,称为有源TCP链接, 用于外部通讯:

    •            Proto: 连接所属的协议
    •            Recv-Q:网络接收队列,表示有多少数据包已在本地接收缓冲,但是还有多少没有被进程取走,正常来讲是0,如果非零可能是程序处于阻塞状态。
    •            Send-Q:  网络发送队列,表示有多少对方没有收到的数据包。
    •            Local Address: 本地地址。
    •            Foreign Address: 外部地址。
    •            STATE:链接状态,常见的链接状态包括LISTEN, TIME_WAIT,ESTABLISHED等。

           第二部分称为有源UNIX域套接口(Active UNIX domain sockets (servers and established)),用于本机的通讯。

 

  • 列出网络统计信息:

 

        -s选项可以统计出本机上不同的网络协议的相关信息,例如每个协议有多少连接建立成功,有多少连接建立失败,发送了几个包。具体的统计信息因为协议的不同而有差异。

  • 列出所有网络接口的信息

 

     其中:

    • Iface:网络接口名。
    • MTU: 最大传输单元,即网络接口可以接收的最大的数据包的值。
    • RX-OK/TX-OK: 网卡正确接收/发送数据包的数量
    • RX-ERR/RX-ERR:网卡错误接收/发送数据包的数量
    • RX-DRP/TX-DRP:网卡接收/发送流失的数据包的数量
    • RX-OVR/TXOVR:网卡接收/发送数据报发生碰撞的数量
  • 列出所有状态为LISTEN的套接字接口

 

 

  • 列出所有tcp和udp的端口
    • 处于监听状态的TCP端口

 

    • 处于监听状态的UDP端口

 

  • 显示核心路由信息

 

 

 

  • 列出组播组的信息

 

4. ifconfig

ifconfig用来显示或者配置网络信息。

 

 

左边这一列代表网卡的名称,如ens38代表以太网网卡,lo代表环回地址,右边的则显示的是网卡的详细信息,flags是网卡的标志集合,如UP代表网卡启动,BROADCAST代表启动广播。下面的行代表网卡的具体信息,如inet表示网卡的IP地址,broadcast代表广播地址,netmask代表子网掩码。最后4行代表这块网卡接收发送数据报的情况。

ifconfig不只能显示网卡信息,还可以修改网卡信息,例如通过该命令可以关闭/开启网卡,修改网卡的地址等。

5.route

route命令主要用来查看和修改路由表,路由表中主要记录目标IP地址,网关,子网掩码等信息,通过route命令可以实现route命令的增删改查。

6.arp

arp命令和route命令类似,但是它操控的是系统中的arp缓存表,arp缓存表可能有一个或者多个,这取决于计算机有多少个网卡。

 

7.traceroute

traceroute命令和Ping从原理上有一点相似,都是用的ICMP协议。traceroute用来记录本机发出的数据包到达目标IP之前,经过的路由情况。具体的实现原理是通过TTL字段的设置,TTL字段用来记录数据报在被丢弃之前,能过经过的结点数,每经过一个结点,就将TTL减1,当TTL值为0时,路由器会丢弃这个数据报,并返回错误报文。traceroute从本机向目标机器不断发送数据报,将这些数据报的TTL值设置为1~N,这样在本机和目标主机的路由上,每个结点都会发送一个错误报文回来,根据这些错误报文就可以确定具体的路由,以及响应时间等其他信息。

8.host

host是DNS查询命令,可以通过主机名来查询IP地址,或者反过来,根据IP地址来查询主机名。

 

 

9.dig

   dig命令是域名检测工具,用来从域名系统反推断主机地址。

 

10.tcpdump

tcpdump用来对网卡上抓获的包进行分析,可以进行抓包,筛选包,逻辑判断等一系列操作。如果不指定的话,它总是获取第一张网卡上流经的包。包的信息包括时间,协议名称,源地址,目标地址,双方端口等。

 

tcpdump -h
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.1.1  11 Sep 2018
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
        [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
        [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
        [ -Q in|out|inout ]
        [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
        [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
        [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
        [ -Z user ] [ expression ]

 

 

 因为tcpdump命令能抓取相当多的信息,所以还需要和参数配合,才能提取最有用的信息。

在Linux上,tcpdump抓下来的包不好分析,我们可以将包拿到wireshark中分析。