Linux.02::网络命令行

ping

ping是通过发送ICMP报文(回显请求), 并等待回显请求的应答, 目标主机的防火墙可能对ICMP报文做了限制, 所以ping不通不代表无法ssh.

ifconfig

  • 启动关闭指定网卡

    ifconfig eth0 up
    ifconfig eth0 down
  • 配置IP地址 ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255

netstat

显示建立的网络连接, 分为三种: tcp/udp/unix(进程通讯)

  • netstat -au : 显示所有udp连接
  • netstat -at : 显示所有tcp连接
  • netstat -nlt :
    • -n 显示ip而非域名
    • -l 显示所有listen状态的连接
    • -p 显示出连接对应的进程, 需要root权限才能看到
  • netstat -r : 显示路由表/网关, 同 route返回的

nslookup, dig

nslookup, dig 都是DNS查询命令:

  • nslookup: 用于对DNS正向解析 & 返向解析;
    • nslookup a.xxx.com 使用默认dns查询网址的dns记录
    • nslookup a.xxx.com 8.8.8.8 使用指定dns服务器查询dns记录
  • dig: 是一个用于询问DNS 域名服务器的灵活的工具。它执行DNS 查询,显示从已查询名称服务器返回的应答。
    • dig: 显示13个根域服务器
    • dig www.baidu.com: 使用默认dns查询网址的dns记录
    • dig @8.8.8.8 www.yahoo.com: 使用指定dns服务器查询dns记录

route

  • 命令格式 route add 目标网段 gw 网关地址 dev 设备
  • 增加默认网关 route add default gw 192.168.0.254
  • 增加网关: route add -net 192.168.1.0 netmask 255.255.255.128 gw 192.168.1.129 dev eth0
  • 删除网关: route del -net 192.168.1.0 netmask 255.255.255.128 dev eth0
  • 查看内核路由表: route, 返回如下:

    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    192.168.6.0 * 255.255.255.0 U 0 0 0 eth0
    link-local * 255.255.0.0 U 1002 0 0 eth0
    default 192.168.6.253 0.0.0.0 UG 0 0 0 eth0
    • Destination : 目标网段或者主机,Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关
    • Gateway : 网关地址。如果是*表示目标是本主机所属的网络不需要路由
    • Genmask : 网络掩码
    • Flags : 标记。一些可能的标记如下:
      • U — 路由是活动的
      • H — 目标是一个主机
      • G — 路由指向网关
例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。
Destination    Gateway       Genmask Flags    Metric    Ref     Use    Iface
----------- ------- ------- ----- ----- --- --- -----
192.19.12 192.168.1.1 255.255.255.0 UN 0 0 0 eth0
例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。
Destination    Gateway       Genmask Flags     Metric    Ref    Use    Iface
----------- ------- ------- ----- ------ --- --- -----
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

traceroute

当ping不到或者丢包严重时, 使用traceroute可以看到从当前计算机到目标主机每一跳的耗时情况, 在哪一个节点丢包等细节

例子:

  • traceroute -I a.com : 使用ICMP ECHO
  • traceroute -T a.com : 使用TCP SYN
  • traceroute -p 8080 a.com : 查询到主机指定端口的路由

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。

linux系统中,我们称之为 traceroute,在MS Windows中为 tracert

traceroute的工作机制主要是利用使用ICMP报文和和IP首部中的TTL(Time to Live?)字段来实现的。在网络数据包的传输过程中,每个处理处理数据包的路由器都要讲数据包的TTL值减1或者减去数据报在路由器中停留的秒数,由于大多数的路由器转发数据报的延时都小于1秒钟,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都将其值减1。TTL字段的目的是防止数据报在网络中无休止的流动。当路由器收到一份IP数据报,如果TTL字段是0或者1,则路由器不转发该数据报(接收到这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。但是,在通常情况下系统不应该接收TTL字段为0的数据报)。通常情况下是,路由器将该数据报丢弃,并给信源主机发送一份ICMP超时信息。tracerouter程序的关键在于,这份ICMP超时信息包含了该路由器的地址。
tracerouter利用网络协议的这种机制,TTL值从1开始每次发送一个TTL等于上次值加一的数据包,直到收到目的主机的响应才停止。这样就能拿到数据包经过路径上的每个路由器的地址信息,从而打印路由信息。
有些情况下traceroute无法到达最终节点(traceroute一台主机时,会看到有一些行是以星号表示的) 有可能因为主机屏蔽了ICMP回显, 对于有HTTP服务的服务器, 可以使用-p 指定端口使用TCP协议进行探测traceroute -T -p 80 a.xxx.com (在 macOS上好像不支持-T)

nmap

探测远端机器端口 nmap 192.168.1.1 -p 80

nc(netcat)

  • 接受文件: nc -4 -l -p local_port > file 说明: -4是指IPv4, 如果默认-6有问题就试试这个, -l=listen, -p=port
  • 发送文件: nc dest_ip dest_port < file

tcpdump

=> [[../22.Network-Protocol/Tcpdump]]

网卡吞吐量(Throughput)

iftop

iftop底部会显示一些全局的统计数据,peek 是指峰值情况,cumm 是从运行至今的累计情况,而 rates 表示最近 2 秒、10 秒、40 秒内总共接收或者发送的平均网络流量。

TX:  cumm:   143MB   peak:   10.5Mb    rates:   1.03Mb  1.54Mb  2.10Mb
RX: 12.7GB 228Mb 189Mb 191Mb 183Mb
TOTAL: 12.9GB 229Mb 190Mb 193Mb 185MbW

iperf

  • server: iperf -s
  • client: iperf -c 192.168.0.138 -t 60 -l 8k -i 10 // 进行60秒测试, 缓冲区大小8k, 每10秒打印一次结果

测试阿里云服务器大约67.5 Mbits/sec, 似乎是Mac无线网卡的限制…内网的两台服务器测试(非同一机房) 450 Mbits/sec

netperf

  • server端: netserver
  • client端测试tcp: ./netperf -t TCP_STREAM -H 192.168.0.138 -l 60 -- -m 2048 # 测试时长60秒, 发送分组大小2048 Bytes
  • client端测试udp: ./netperf -t UDP_STREAM -H 192.168.0.138 -l 60 -- -m 2048