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 restart
或systemctl 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.252
的22
端口,此时如果用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
类型关键字,如host
、net
、port
和portrange
,分别表示主机、网段、端口号、端口段。
direction
方向关键字,如src
、dst
分别表示源和目的。
proto
协议关键字,如fddi
、arp
、ip
、tcp
、udp
等分别表示各种网络协议。
由于篇幅所限,下面的例子中将只描述选项和表达式所起到的作用,不再解释输出内容:
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基础命令介绍六:网络的主要内容,如果未能解决你的问题,请参考以下文章