Linux之网络相关命令——ping、tranceroute、netstat、ftp、lftp、wget、ssh、scp、sftp

2023-05-16

网络连接方面,Linux可以说是万能的. Linux工具可以建立各种网络系统及应用,包括防火墙、路由器、域名服务器、NAS(网络附加存储)盒等。
这里主要讲一些经常用到的命令,涉及网络检测以及文件传输等方面。所涉及的命令包括:

  • ping: 向网络主机发送 ICMP ECHO_REQUEST数据包
  • traceroute: 显示数据包到网络主机的路由路径
  • netstat: 显示网络连接、路由表、网络接口数据、伪连接以及多点传送成员等信息
  • ftp:文件传输命令
  • lftp:改善后的文件传输命令
  • wget:非交互式网络下载器
  • ssh: OpenSSH(SSH协议的免费开源实现)版的SSH客户端(远程系统登录命令)。
  • scp: srcure copy的缩写,是远程复制文件命令。
  • sftp: secure file transfer program的缩写,安全文件传输程序。

0.参考书籍

《Linux命令行大全》 [美] William E. Shotts. Jr 著 郭光伟 郝记生 译, 人民邮电出版社

如有侵权,可联系博主删除。

1. 检查、检测网络

1.1 ping—向网络主机发送特殊数据包

ping命令会向指定的网络户籍发送特殊网络数据包IMCP ECHO_REQUEST.多数网络设备收到该数据包后会做出回应,通过此法即可验证网络连接是否正常,

$ ping baidu.com
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79: icmp_seq=1 ttl=44 time=27.7 ms
64 bytes from 39.156.69.79: icmp_seq=2 ttl=44 time=27.1 ms
64 bytes from 39.156.69.79: icmp_seq=3 ttl=44 time=27.2 ms
64 bytes from 39.156.69.79: icmp_seq=4 ttl=44 time=27.0 ms
...
^C
--- baidu.com ping statistics ---
32 packets transmitted, 32 received, 0% packet loss, time 31129ms

一旦程序启动,ping命令便以既定的时间间隔(默认1s)传送数据包直到该命令被打断。按下Ctrl+C结束。
数据包丢失0%说明网络运行正常。

1.2 traceroute—跟踪网络数据包的传输路径

traceroute程序会显示文件通过网络从本地系统传输到指定主机过程中所有停靠点的列表。
例如

$ traceroute baidu.com
 1  10.20.3.1 (10.20.3.1)  5.509 ms  5.782 ms  6.082 ms
 2  10.250.1.1 (10.250.1.1)  0.206 ms  0.198 ms  0.179 ms
 3  * * *
 4  224.fudan.edu.cn (202.120.224.3)  1.518 ms  2.661 ms  2.050 ms
 5  * * *
 6  10.255.19.1 (10.255.19.1)  3.072 ms  2.929 ms  2.983 ms
 7  10.255.249.45 (10.255.249.45)  1.623 ms  1.311 ms  1.216 ms
 8  10.255.38.250 (10.255.38.250)  1.414 ms  1.532 ms  1.719 ms
 9  202.112.27.1 (202.112.27.1)  2.414 ms  2.153 ms  3.080 ms
10  101.4.115.105 (101.4.115.105)  2.367 ms  2.299 ms  2.217 ms
11  101.4.117.30 (101.4.117.30)  21.143 ms  23.262 ms  22.130 ms
12  101.4.116.118 (101.4.116.118)  29.939 ms  29.975 ms  30.451 ms
13  101.4.112.69 (101.4.112.69)  27.647 ms  27.083 ms  27.551 ms
14  101.4.113.110 (101.4.113.110)  30.981 ms  31.284 ms  31.169 ms
15  101.4.116.66 (101.4.116.66)  30.915 ms  28.574 ms  28.971 ms
16  101.4.117.110 (101.4.117.110)  31.936 ms  32.072 ms  32.223 ms
17  202.97.57.173 (202.97.57.173)  29.062 ms 202.97.88.233 (202.97.88.233)  27.312 ms  27.359 ms
18  * 180.149.159.10 (180.149.159.10)  27.638 ms *
19  36.110.244.94 (36.110.244.94)  65.536 ms * *
20  * * *
21  220.181.182.34 (220.181.182.34)  28.894 ms 220.181.17.90 (220.181.17.90)  29.379 ms *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

说明从测试系统到https://www.baidu.com/网站的连接需要经过30个路由器,对于提供身份信息的路由器,列表列出了主机名、IP地址以及运行状态信息。信息包含了从本地系统到路由器3次往返时间。
而对于那些因为路由器配置、网络堵塞或是防火墙等等原因不提供身份信息的路由器,则直接用星号行表示。

1.3 netstat—检查网络设置及相关统计数据

netstat使用-ie选项,可以检查系统中的网络接口信息。

$ netstat -ie

enp13s0f1 Link encap:Ethernet  HWaddr a0:42:3f:37:59:55
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: 2001:da8:8001:263:a242:3fff:fe37:5955/64 Scope:Global
          inet6 addr: fe80::a242:3fff:fe37:5955/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:526542080 errors:0 dropped:1452651 overruns:703 frame:0
          TX packets:332330448 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:618633150746 (618.6 GB)  TX bytes:217758725891 (217.7 GB)
          Memory:c7200000-c721ffff

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:155800939 errors:0 dropped:0 overruns:0 frame:0
          TX packets:155800939 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:221954702938 (221.9 GB)  TX bytes:221954702938 (221.9 GB)

以上输出信息显示,测试系统有两个网络端口:第一个称为enp13s0f1,是以太网端口;第二个称为lo,是系统用来自己访问自己的回环虚拟接口。
对于网络接口进行日常诊断,关键是看能否在每个接口信息第四行的开头找到UP这个词以及能否在第二行的inet addr字段找到有效的IP地址。第四行的UP代表着该网络接口已启动,而对于使用动态主机配置协议的系统(DHCP),inter addr字段里边的有效IP地址则说明了DHCP正在工作。

使用-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 enp13s0f1
192.168.1.1     0.0.0.0              UG          0  0           0  eth0  

2.通过网络传输文件

2.1 ftp—采用FTP(文件传输协议)传输文件

ftp是Linux比较经典的命令之一,由File Transfer Protocol协议缩写而来.
FTP原来的表现形式并不安全,因为它以明文的方式传送账户名以及密码。这意味着这些信息并没有加密,任何一个接触网络的人都能看到它们。鉴于此,几乎所有使用FTP协议进行的网络文件传输都是由匿名FTP服务器处理的。匿名服务器允许任何人使用anonymous登录名以及无意义的密码登录。

2.2 lftp—更好的ftp(文件传输协议)

lftp与传统的ftp程序功能类似,但有很多其它便利的功能,包括多协议支持(HTTP)、下载失败时自动重新尝试、后台进程支持、Tab键完成文件名输入等许多其他功能。

2.3 wget—非交互式网络下载工具

wget既可以用于从网站上下载内容,也可以从FTP站点下载,单个文件、多个文件甚至整个网址都可以被下载。

$ wget http://linuxcommand.org/index.php
--2020-06-12 20:02:13--  http://linuxcommand.org/index.php
Resolving linuxcommand.org (linuxcommand.org)... 216.105.38.10
Connecting to linuxcommand.org (linuxcommand.org)|216.105.38.10|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4005 (3.9K) [text/html]
Saving to: ‘index.php’

index.php                       100%[======================================================>]   3.91K  --.-KB/s    in 0s

2020-06-12 20:02:15 (305 MB/s) - ‘index.php’ saved [4005/4005]

从http://linuxcommand.org下载了第一页。

3. 与远程主机的安全通信

3.1 ssh—安全登录远程计算机

SSH(Secure Shell)协议是为了解决明文传送的问题。SSH协议包括两个部分:一个是运行在远程主机上的SSH服务端,用来监听端口22上可能过来的连接请求;另一个是本地系统上SSH客户端,用来与远程服务器进行通信。
多数Linux发行版都采用BSD项目的openSSH(SSH的免费开源实现)方法实现SSH。一些版本如Red Hat会默认包含客户端包和服务端包,而像Ubuntu则仅仅提供客户端包,系统要接受远程连击,必须安装、配置以及运行OpenSSH-server软件包,并且必须允许TCP端口22上进来的网络连接。

例如使用ssh客户端程序来建立与远程主机romote-sys的连接的例子

$ ssh remote-sys

第一次尝试连接的时候,由于ssh程序从来没有接触过此远程主机,所以会跳出一条“不能确定远程主机真实性”的消息。需要输入yes来接受远程主机的身份,一旦建立了连接,会提示用户盲输密码。

输入正确密码后,远程系统的shell提示符便出现了。
远程shell对话将一直开启,直到用户在该对话框中输入exit命令断开与远程系统的连接。连接一旦断开后,本地shell会话恢复,本地shell提示符又重新出现。

以下一段是博主个人经验
我们常用的的实际上是ssh username@192.168.20.55(IP地址) 这样形式的,有些端口不是默认的22,需要加参数 -p11524(端口号)

ssh命令除了能开启远程系统上的shell会话外,还能在远程系统上执行单个简单的命令.

$ ssh romote-sys free

3.2 scp和sftp—安全传输文件

OpenSSH软件包含了两个使用SSH加密隧道进行网络间文件复制的程序,scp(secure copy)便是其中之一。例如从remote-sys远程系统的home目录中将doc.txt的文件复制到本地系统。

$ scp remote-sys:doc.txt .

如果不是本地系统的用户名登录远程系统,那么需要在远程主机名前添加将要登录的远程系统的账户名

$ scp bob@remote-sys:doc.txt

如果是文件夹的话,需要加参数-r
另外一个SSH文件复制程序是sftp。顾名思义,它是ftp程序的安全版本。sftp与ftp很相似,只是sftp采用SSH加密隧道传输信息而不是以明文方式传输。另外一个优点是不需要远程服务器运行FTP服务器,仅仅需要SSH服务器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux之网络相关命令——ping、tranceroute、netstat、ftp、lftp、wget、ssh、scp、sftp 的相关文章

  • 使用 Python ftplib 获取远程 FTP 服务器中文件的 MD5 值

    使用 ftplib 将文件传输到服务器后 如何确定该文件与本地服务器中的文件的 MD5 from ftplib import FTP import hashlib ftp FTP server ftp login username pass
  • 在 Ubuntu 16.04 上找不到 printf.c

    我最近切换到Ubuntu 16 04 我在用vscode作为 Ubuntu 上的 IDE 我配置了其他语言 但我无法做到这一点C C 我创建c cpp properties json launch json tasks json 当我开始编
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • K8s服务无法ping通

    我在 minikube 集群中有一个 k8s 服务 部署 名称amq in default命名空间 D20181472 argo k8s gms kubectl get svc all namespaces NAMESPACE NAME T

随机推荐