linux基础命令介绍六:网络

Posted 51reboot运维开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux基础命令介绍六:网络相关的知识,希望对你有一定的参考价值。

不 断 前 行,方 可 不 被 淘 汰

8、route 显示或更改路由表

[root@centos7 ~]# route
Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.1.0        0.0.0.0         255.255.255.0   U     0      0        0 ens33
link-local      0.0.0.0         255.255.0.0     U     1002   0        0 ens32
link-local      0.0.0.0         255.255.0.0     U     1003   0        0 ens33
172.20.71.0     0.0.0.0         255.255.255.0   U     0      0        0 ens32
192.168
.78.0    10.0.1.104      255.255.255.0   UG    0      0        0 ens33

如增加一条到192.56.76.x的路由,使它的出口为ens32:

route add -net 192.56.76.0 netmask 255.255.255.0 dev ens32

如增加一条默认路由,指明它的网关为10.0.1.1

route add default gw 10.0.1.1

如增加一条到172.20.70.0的路由,网关为10.0.1.2

route add -net 172.20.70.0/24 gw 10.0.1.2

如删除默认路由

route del default

9、telnet 提供远程登录功能

由于telnet协议使用明文传输,在要求安全登录的环境中并不适用。现在通常用它来进行网络服务的端口测试:

[root@centos7 ~]# telnet 10.0.1.251 80
Trying 10.0.1.251... Connected to 10.0.1.251. Escape character is '^]'. ^]            #这里按了CTRL+],也可以按CTRL+C强行退出。
telnet> quit Connection closed.

这里对方的80端口是开启并允许通信的。当对端端口没有开启时:

[root@centos7 ~]# telnet 10.0.1.251 81
Trying 10.0.1.251... telnet: connect to address 10.0.1.251: No route to host

当对端拒绝连接时:

[root@centos7 ~]# telnet 10.0.1.251 8085
Trying 10.0.1.251... telnet: connect to address 10.0.1.251: Connection refused

10、ssh 远程登录程序

ssh [OPTIONS]... [user@]hostname [command]

ssh的全称是Secure Shell,在不安全的网络主机间提供安全加密的通信,旨在代替其他远程登录协议。

[root@centos7 ~]# ssh 10.0.1.253
The authenticity of host '10.0.1.253 (10.0.1.253)' can't be established. ECDSA key fingerprint is 96:bd:a3:a7:87:09:1b:53:44:4c:9b:b9:5f:b2:97:89. Are you sure you want to continue connecting (yes/no)? yes   #这里输入yes Warning: Permanently added '10.0.1.253' (ECDSA) to the list of known hosts. root@10.0.1.253's password:           #这里输入密码
Last login: Fri Nov 11 09:04:01 2016 from 192.168.78.13
[root@idc-v-71253 ~]#                 #已登录

当命令ssh后直接跟主机IP时表示使用默认用户root登录,如果是首次登录,需要确认添加该主机的认证key,当输入yes后,即会在本机/root/.ssh/known_hosts中增加一条该主机的记录,下一次登录时就不用再次确认了。然后需要输入用户密码,通过验证之后,我们就获得了目的主机的一个shell,我们就可以在这个shell中执行命令了。
在新shell中输入exit即可退回到原shell。

如果需要频繁登录某主机,但不想每次都输入密码,可以设置免密码登录:

(点击代码框,可上下拖动)

[root@centos7 ~]# ssh-keygen -t rsa       
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): #回车
Enter passphrase (empty for no passphrase): #回车
Enter same passphrase again: #回车
Your identification has been saved in /root/.ssh/id_rsa. #私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. #公钥
The key fingerprint is:
be:c3:d0:02:50:35:35:fe:60:d6:2f:26:96:f0:e1:e6
root@centos7The key's randomart image is: +--[ RSA 2048]----+ |   ...o.o        | |  .    o o       | |   .  . * .      | |    .  * = .     | |     . .S + .    | |      o=.o .     | |       +E        | |        o.       | |        ..       | +-----------------+ [root@centos7 ~]# [root@centos7 ~]# ssh-copy-id 10.0.1.253 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@10.0.1.253's password: Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '10.0.1.253'"
and check to make sure that only the key(s) you wanted were added. [root@centos7 ~]#

其中命令ssh-keygen用来生成公钥私钥,选项-t指明密钥类型。之后使用命令ssh-copy-id将公钥发送至目标主机,这里需要输入目标主机用户密码。然后就可以免密码登录了:

[root@centos7 ~]# ssh 10.0.1.253
Last login: Fri Nov 11 11:08:37 2016 from 10.0.1.254
[root@idc-v-71253 ~]#

还可以通过ssh远程执行命令:

[root@centos7 ~]# ssh 10.0.1.252 "hostname"
root@10.0.1.252's password:  #输入密码
idc-v-71252                  #显示命令结果
[root@centos7 ~]#            #并不登录

或者手动将公钥拷贝至目标主机:

[root@centos7 ~]# cat /root/.ssh/id_rsa.pub | ssh 10.0.1.252 "cat - >> /root/.ssh/authorized_keys"
root@10.0.1.252's password:          #输入密码
[root@centos7 ~]# ssh 10.0.1.252     #免密登录
Last login: Thu Nov 10 14:42:11 2016 from 192.168.78.135
[root@idc-v-71252 ~]#

选项-p为登录指定端口:

[root@centos7 temp]# ssh -p22 10.0.1.252
Last login: Fri Nov 11 11:44:31 2016 from 10.0.1.254
[root@idc-v-71252 ~]#

端口设置在服务端配置文件/etc/ssh/sshd_config中,默认端口号为22,如更改需将#Port 22去掉注释并将22更改为需要的端口,然后重启sshd服务service sshd restartsystemctl restart sshd
如果需要使用另外的用户登录系统则执行ssh user@host
我们可以用tar命令结合ssh和管道,将本地(远程)文件备份到远程(本地):

tar zc /home/temp | ssh user@host "tar xz"  #本地temp目录备份到远程
ssh user@host "tar cz /home/temp" | tar xz  #远程temp目录备份到本地

选项-L [bind_address:]port:host:hostport设置本地端口转发

[root@centos7 ~]# ssh -L 2222:10.0.1.252:22 10.0.1.253
Last login: Mon Nov 14 10:34:43 2016 from 10.0.1.254
[root@idc-v-71253 ~]
#    #注意如果这里exit断开连接,则此转发也将终止。

此命令的意思是绑定本地端口2222,并将所有发送至此端口的数据通过中间主机10.0.1.253转发至目标主机10.0.1.25222端口,此时如果用ssh登录本机的2222端口,则实际登录的是主机10.0.1.252

[root@centos7 ~]# ssh -p 2222 127.0.0.1
Last login: Mon Nov 14 10:34:56 2016 from 10.0.1.253
[root@idc-v-71252 ~]#
[root@centos7 ~]# ssh -N -L 2222:10.0.1.252:22 10.0.1.253 &
[1] 12432
[root@centos7 ~]#

命令最后的符号&表示此命令将在后台执行,返回的信息中[1]表示后台命令编号,12432表示命令的PID。(关于shell后台命令,以后的文章中会有叙述)
选项-R [bind_address:]port:host:hostport 设置远程端口转发
如我们在10.0.1.253上执行:

ssh -R 2222:10.0.1.252:22 10.0.1.254

然后在10.0.1.254上登录:

[root@centos7 ~]# ssh -p 2222 localhost
Last login: Mon Nov 14 10:40:44 2016 from 10.0.1.253
[root@idc-v-71252 ~]#

这里的意思是使远程主机10.0.1.254(相对10.0.1.253来说)监听端口2222,然后将所有发送至此端口的数据转发至目标主机10.0.1.252的端口22。之后再在10.0.1.254登录本地(localhost)的2222端口时,实际通过中间主机10.0.1.253登录目标主机10.0.1.252
选项-o OPTION指定配置文件(如/etc/ssh/sshd_config)内选项
如避免第一次登录时输入yes确认,可增加-o StrictHostKeyChecking=no

11、scp 远程复制文件

scp [OPTIONS]... [[user@]host1:]file1 ... [[user@]host2:]file2

scp命令通过ssh协议将数据加密传输,和ssh登录类似,需要输入远程主机用户密码。
如将远程主机10.0.1.253中文件/root/tcp.sh复制到本地当前目录下:

[root@centos7 ~]# scp root@10.0.1.251:/root/a.txt ./
root@10.0.1.251's password: a.txt                                       100%  125     0.1KB/s   00:00     [root@centos7 ~]#

命令会显示传输状态(传输百分比,大小,速度,用时)。
将本地文件复制到远程无非是将源和目的调换位置。
选项-P指定远端连接端口(ssh服务端口),-o ssh_option使用ssh选项。
选项-l limit传输限速,limit单位为Kbit/s。
和命令cp类似,选项-r表示复制目录,-p表示保留文件权限时间等

12、netstat 打印网络信息

选项-a显示所有端口信息:

[root@centos7 ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN    
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN    
tcp        0     52 10.0.1.254:ssh   192.168.78.143:49583    ESTABLISHED
tcp6       0      0 [::]:commplex-main      [::]:*                  LISTEN    
tcp6       0      0 [::]:4243               [::]:*                  LISTEN    
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN    
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN    
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7          
raw6       0      0 [::]:ipv6-icmp          [::]:*                  7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     12807    /run/systemd/private unix  2      [ ACC ]     STREAM     LISTENING     12815    /run/lvm/lvmpolld.socket unix  2      [ ]         DGRAM                    12818    /run/systemd/shutdownd unix  2      [ ACC ]     STREAM     LISTENING     16403    /var/run/dbus/system_bus_socket ....
[root@centos7 ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1358/sshd           tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2162/master         tcp        0     52 10.0.1.254:22           192.168.78.143:49583    ESTABLISHED 12044/sshd: root@pt
tcp6       0      0 :::5000                 :::*                    LISTEN      17222/docker-proxy   tcp6       0      0 :::4243                 :::*                    LISTEN      16983/docker         tcp6       0      0 :::22                   :::*                    LISTEN      1358/sshd           tcp6       0      0 ::1:25                  :::*                    LISTEN      2162/master         [root@centos7 ~]#
[root@centos7 ~]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN    
tcp6       0      0 :::5000                 :::*                    LISTEN    
tcp6       0      0 :::4243                 :::*                    LISTEN    
tcp6       0      0 :::22                   :::*                    LISTEN    
tcp6       0      0 ::1:25                  :::*                    LISTEN    
[root@centos7 ~]#

选项-u表示显示UDP连接信息
选项-r表示显示路由信息

[root@centos7 ~]# netstat -r
Kernel IP routing table Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.0.1.103      0.0.0.0         UG        0 0          0 ens33
10.0.1.0        0.0.0.0         255.255.255.0   U         0 0          0 ens33
172.20.71.0     0.0.0.0         255.255.255.0   U         0 0          0 ens32
192.168.78.0    10.0.1.104      255.255.255.0   UG        0 0          0 ens33

选项-i显示接口信息

[root@centos7 ~]# netstat -i
Kernel Interface table Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg ens32     1500 13196107      0     77 0          3246      0      0      0 BMRU ens33     1500 25312388      0     88 0       2516050      0      0      0 BMRU lo       65536  2503589      0      0 0       2503589      0      0      0 LRU

13、tcpdump 网络抓包工具

命令tcpdump捕获某网络接口符合表达式expression的数据包,并打印出数据包内容的描述信息。
选项-i指定网卡:

[root@idc-v-71253 ~]# 
tcpdump -i ens33tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening
on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
15:41:59.121948 IP 10.0.1.108.3693 > 239.100.1.1.websm: UDP, length 58 15:41:59.122191 IP 10.0.1.109.35673 > 239.100.1.1.websm: UDP, length 57 15:41:59.128282 IP 10.0.1.253.ssh > 192.168.78.143.51694: Flags [P.], seq 749565300:749565496, ack 3522345564, win 255, length 196 15:41:59.134127 IP 192.168.78.143.51694 > 10.0.1.253.ssh: Flags [.], ack 196, win 3977, length 0 15:41:59.140319 ARP, Request who-has 10.0.1.31 tell 10.0.1.102, length 46 15:41:59.168328 ARP, Request who-has 10.0.1.37 tell 10.0.1.102, length 46 15:41:59.262235 ARP, Request who-has 192.168.10.150 tell 192.168.10.151, length 46 15:41:59.622090 IP 10.0.1.108.3693 > 239.100.1.1.websm: UDP, length 58 15:41:59.622178 IP 10.0.1.109.35673 > 239.100.1.1.websm: UDP, length 57 ....

启动命令之后显示出可以使用-v-vv显示更详细的信息,开始从ens33捕获数据包。输出显示出各个发送或接收数据包包头信息(包括ARP、IP、TCP、UDP等等协议)。此命令并未指定expression,所以默认将捕获所有数据包。

如果需要将数据包捕获然后通过其他程序(如wireshark)分析,可以使用选项-w file将数据写入文件,同时还需要使用选项-s 0指定能够捕获的数据包大小为65535字节,以避免数据包被截断而无法被分析。

真实环境中,流经网卡的数据包量是巨大的。可以使用表达式来对数据包进行过滤,对于每个数据包,都要经过表达式的过滤,只有表达式的值为true时,才会输出。
expression中可以包含一到多个关键字指定的条件,可以使用and(或&&)、or(或||)、not(或!)和括号()表示各个关键字间的逻辑关系,可以用><表示比较,还可以进行计算。其中关键字包括:
type类型关键字,如hostnetportportrange,分别表示主机、网段、端口号、端口段。

direction方向关键字,如srcdst分别表示源和目的。

proto协议关键字,如fddiarpiptcpudp等分别表示各种网络协议。

由于篇幅所限,下面的例子中将只描述选项和表达式所起到的作用,不再解释输出内容:

tcpdump -i ens33 dst host 10.0.1.251 
#监视所有从端口ens33发送到主机10.0.1.251的数据包,主机也可以是主机名
tcpdump -i eth0 host ! 211.161.223.70 and ! 211.161.223.71 and dst port 80
#监听端口eth0,抓取不是来自或去到主机211.161.223.70和211.161.223.71并且目标端口为80的包
tcpdump tcp port 23 host 210.27.48.1
#获取主机210.27.48.1接收或发出的telnet包
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and src net (183.60.190 or 122.13.220)' -s0 -i eth0 -w ipdump
#抓取源或目的端口是80,且源网络是(183.60.190.0/24 或者 122.13.220.0/24),并且含有数据,而不是SYN,FIN以及ACK-only等不含数据的TCP数据包写入文件ipdump
#注意这里表达式使用单引号引起来以避免其中的特殊字符被shell解析而造成语法错误
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and ! src and dst net 10.0.0'
#只打印TCP的开始和结束包(SYN和FIN标记),并且源和目标网段均不是10.0.0.0/24
tcpdump 'gateway 10.0.1.1 and ip[2:2] > 576'
#表示抓取发送至网关10.0.1.1并且大于576字节的IP数据包

相关链接:

1、

2、

3、

4、

5

6、

7、

8、

9、

10、


课程信息:

课程:第13期Python 实战班

时间:2017年 2月19日(周日)

大纲:http://51reboot.com/course/actual/  (点击阅读原文)

咨询QQ:279312229     979950755 (春节前报名可享优惠)



长按关注——Reboot

技术交流群:238757010


戳原文,更有料!

以上是关于linux基础命令介绍六:网络的主要内容,如果未能解决你的问题,请参考以下文章

linux基础-第十六单元 yum管理RPM包

Linux操作基础

Linux系统下基础命令介绍

Linux系统下基础命令介绍

Linux系统下基础命令介绍

#导入Word文档图片# Linux系统与终端基础命令介绍