ifconfig
用于配置及显示网络接口,子网掩码等细节信息,它通常位于/sbin/ifconfig中。
[land@localhost ~]$ ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.192.191 netmask 255.255.255.0 broadcast 192.168.192.255
inet6 fe80::c165:577c:9253:847d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:37:5d:63 txqueuelen 1000 (Ethernet)
RX packets 88 bytes 14165 (13.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 89 bytes 10542 (10.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 68 bytes 5920 (5.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 68 bytes 5920 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens32为网卡的名字,inet为IPV4地址192.168.192.191,网关255,255,255,255,广播地址为192.168.192.255.
设置网络接口的IP地址,注意执行此操作需要使用root权限。也可以使用netmask设置子网掩码
[land@localhost ~]$ ifconfig virbr0 192.168.122.2
SIOCSIFADDR: Operation not permitted
SIOCSIFFLAGS: Operation not permitted
域名服务
将IP地址映射为符号名称叫做域名服务,名字服务器是在文件/etc/resolv.conf中定义:
[land@localhost ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.192.2
添加名字服务器使用以下命令
sudo echo nameserver IP_ADDRESS >> /etc/resolv.conf
或者直接修改resolv.conf文件即可。
host
用于列出某个域名对应的所有IP地址,(nslookup)命令也可以完成名字与IP地址之间的相互映射。
[land@localhost ~]$ host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 61.135.169.125
www.a.shifen.com has address 61.135.169.121
[land@localhost ~]$
也可以在/etc/hosts中加入条目来实现名字解析,格式为:
IP_ADDRESS name1 name2
route
显示路由表的信息,路由表记录着信息从哪去哪
[land@localhost ~]$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 100 0 0 ens32
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.192.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
ping
用于检查网络上主机之间的连通性,ping命令使用Internet控制消息协议(ICMP)中的echo分组检查网络上两台主机之间的连通性。
检查某台主机是否可达:ping ADDRESS,默认情况下,ping会连续发送分组,回应信息将被打印在终端上,可用Ctrl+C来停止ping命令。
[land@localhost ~]$ ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=128 time=18.2 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=128 time=2.68 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=128 time=7.97 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=4 ttl=128 time=2.48 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=5 ttl=128 time=3.66 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4016ms
rtt min/avg/max/mdev = 2.480/7.020/18.294/5.978 ms
ping命令信息解释:
64 bytes即返回的数据,61.135.169.121即目标主机,icmp_seq即序列号,ping发出的每个分组都有一个序列号,从1开始,指导ping结束。ttl(Time To Live)生存时间,ping命令发送的每个分组都有一个可以在被丢弃前完成的条数,这个值是预先定义好的,分组途径的每个路由器会将该值减1,表明发出ping命令的主机和目的主机之间相隔了多少个路由器。
-c 选线可以指定发送的分组数量
traceroute
用于显示分组途径的所有网关的地址,
[land@localhost ~]$ traceroute google.com
traceroute to google.com (216.58.197.110), 30 hops max, 60 byte packets
1 gateway (192.168.192.2) 0.121 ms 0.158 ms 0.075 ms
2 * * *
3 * * *
4 * * *
5 * * *
ssh
SSH代表的是Secure Shell,使用加密隧道连接两台计算机,ssh能够让你访问远程计算机的shell,从而在其上执行交互命令并接受结果,或启动交互会话。GNU/Linux发布版中默认不包含SSH,需要自己安装,SSH服务运行在端口22上。
[land@localhost ~]$ ssh land@192.168.192.134
The authenticity of host '192.168.192.134 (192.168.192.134)' can't be established.
ECDSA key fingerprint is SHA256:/yJdpunmxQXFzsHp4Yxh38BnVTIxl5g*************.
ECDSA key fingerprint is MD5:f2:11:b7:fc:d4:ea:c9:d8:30**********************.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.192.134' (ECDSA) to the list of known hosts.
land@192.168.192.134's password:
Last login: Wed Dec 12 20:06:57 2018
也可以不登录,直接执行相应的命令,并将结果返回给终端
[land@localhost ~]$ ssh land@192.168.192.134 'ls'
land@192.168.192.134's password:
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
test
Videos
ftp/sftp
ftp(file transfer Protocol)文件传输协议,用于文件共享,FTP服务器通常运行在21端口,远程主机上必须安装并运行ftp服务器才能使用ftp.sftp是一个运行在SSH连接之上并模拟FTP接口的文件传输胸,它不需要远端运行ftp服务器来进行文件传输,但必须有SSH服务器。
[land@localhost ~]$ sftp land@192.168.192.134
land@192.168.192.134's password:
Connected to 192.168.192.134.
sftp> dir
Desktop Documents Downloads Music Pictures Public Templates Videos test
sftp>
SCP
SCP是Secure Copy Program 安全复制程序,scp是一个安全的文件复制命令,文件通过SSH加密通道进行传输。
[land@localhost test]$ scp hello.txt land@192.168.192.134:/home/land/test/
land@192.168.192.134's password:
hello.txt 100% 16 15.2KB/s 00:00
如果想要复制目录,则可以使用-r选项,在两台网络主机间以递归形式复制目录
scp -r /home/usernameuser@remotehost:/home/land/test
实现SSH的免密码自动登录
ssh的使用过程中,通常使用用户名和密码进行认证,在终端进行交互式访问可以,但是如果在脚本中使用ssh,则输入用户名和密码就比较麻烦,所以可以进行配置,实现免密码登录。
ssh使用了非对称加密技术,即使用公钥和私钥,公钥分配给网络中的指定范围的用户,私钥则自身保存,例如:当B想和A通信,B使用A的公钥,对信息进行加密,并将信息发送给A,如果信息被C截获,但是因为C没有A的私钥,所以不能对信息进行解密,只有A收到信息后,才可以对加密的信息使用私钥进行解读。所以,如果想实现免密码登录,则公钥应该放在服务器中(即加入文件~/.ssh/authorized_keys),私钥则应该放入用户所在的客户机器的~/.ssh目录中。其他的配置可在/etc/ssh/sshd_config中进行配置。
使用ssh-keygen命令可以创建一对认证密钥。
实现步骤:
⑴在本地主机上创建SSH密钥
⑵将生成的公钥传给主机并将其加入到文件~/.ssh/autorized_keys中,
[land@localhost test]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/land/.ssh/id_rsa): yes
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in yes.
Your public key has been saved in yes.pub.
The key fingerprint is:
SHA256:CyCe21SVt9vTXRbQSDuU+GsRIUkAuZWEE9rABN34mSw land@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .=oooB++o+=* |
| ++*.o.oo+.o |
| . ..+.*. ..o. .|
| . o E * . o. o|
| o . o S o .oo.|
| + . .. oo. .|
| . . . .. |
| |
| |
+----[SHA256]-----+
ssh-keygen程序会生成两个文件:~/.ssh/xx.pub 是公钥 ~/.ssh/xxx 是私钥
-rw-------. 1 land land 1675 Dec 12 21:34 yes
-rw-r--r--. 1 land land 408 Dec 12 21:34 yes.pub
使用命令添加公钥到服务器的~/.ssh/authorized_keys
[land@localhost test]$ ssh user@remote_host "cat >> ~/.ssh/authorized_keys" < xxx.pub
如果私钥没有在~/.ssh目录中,则需要将私钥放入到该目录中。
lsof
可以列出已打开的文件,选项-i将范围限制在已经打开的网络连接。由于直接输出lsof会出现很多的信息,所以使用管道和head只列出前几个信息。
[root@localhost ~]# lsof | head -5
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root cwd DIR 253,0 224 64 /
systemd 1 root rtd DIR 253,0 224 64 /
systemd 1 root txt REG 253,0 1612152 34349141 /usr/lib/systemd/systemd
systemd 1 root mem REG 253,0 20112 165272 /usr/lib64/libuuid.so.1.3.0
netstat
也可以用来查看开放端口以及网络流量相关信息。
[root@localhost ~]# netstat -tnp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
netcat/nc
可以创建用于在TCP/IP网络上传输数据的套接字,我们需要两个套接字,一个负责侦听连接,一个负责发起连接:
设置侦听套接字,端口自定义,但是尽量不要使用特殊的端口
[land@localhost ~]$ nc -l 6666
连接到该套接字,指定需要连接的IP地址,如果是本地机器,则可以换成localhost
[land@localhost ~]$ nc 192.168.192.135 6666
然后就可以在两个终端输入信息并按回车键,消息就会发送给对方。
iptables
如果系统没有安装,则可以手动安装。
如果不想访问特定站点,可以阻止发送到该IP地址的流量
[root@localhost ~]# iptables -A OUTPUT -d 8.8.8.8 -j DROP
[root@localhost ~]#
[land@localhost ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
阻止发送到特定端口的流量
iptables -A OUTPUT -p tcp -dport 21 -j DROP
参数解读:
-A表明向链中添加一条新的规则,链就是若干规则的集合,OUTPUT链可以控制所有的出站流量,而INPUT链能够控制所有的入站流量,-d指定了所要匹配的分组目的地址,-s指定了分组的源地址,-j指示iptables执行到特定的处理。-p指定适应的协议,-dport指定了对应的端口。
参考《Linux Shell脚本攻略》