《LinuxShell脚本攻略》,Chap-7:无网不利
简介
网络是计算机系统中重要的部分。我们以Tcp/Ip为协议栈,所有操作都是基于它进行的。
一些使用网络的应用通过打开并连接到防火墙端口进行运作,而有的管理任务可以通过网络进行。
网络小知识
网络接口(Interface)用来连接网络。在每个系统中,默认都有一个称之为环回接口的lo,这个接口指向当前主机本身。
操作系统维护者一个被称为路由表(routing table)的表格,它包含了分组如何转发以及通过网络中的哪些节点转发的消息。
metric是路由算法用以确定到达目的地的最佳路径的计量标准,如路径长度。
#显示网络接口、子网掩码等详细信息
ifconfig #/sbin/ifconfig
#显示某个特定接口
ifconfig eth0
#提取IP地址
ifconfig eth0 | egrep -o "inet [^ ]*" | grep -o "[0-9.]*"
#设置网络接口的IP地址和子网掩码
ifconfig eht0 192.168.1.11
ifconfig eth0 192.168.1.11 netmask 255.255.255.0
#远程的时候,千万别乱改IP,不然连不上你就要去机房了
#MAC地址欺骗
ifconfig eth0 hw ether 11:22:33:44:55:66
#域名服务器与DNS
cat /etc/resolv.conf
#添加域名服务器
echo "name 114.114.114.114" >> /etc/resolv.conf
#nameserver 114.114.114.114
#一个域名可以分配多个地址,DNS只会返回其中一个
#要想获得域名所有IP地址,需要使用DNS查找工具
#DNS查找工具
host www.baidu.com
nslookup www.baidu.com
#自定义解析
cat /etc/hosts
echo "192.168.1.11 www.zhang.me" >> /etc/hosts
#设置默认网关,显示路由表信息
#路由表
route
route -n #以数字形式显示地址
#设置默认网关
route add default gw $ip $interface
route add default gw 192.168.1.1 eht0
#显示分组途经的所有网关地址
traceroute www.baidu.com
ping
ping
使用 网际控制报文协议(Internet Control Message Protocol,ICMP)的echo分组。如果分组能够送达且该主机为活动主机,那它就会发送一条回应。一旦主机不可到达,ping返回错误信息"Destination Host Unreachable"。
ping 192.168.1.1
#往返时间(Round Trip Time,RTT)
#发送分组数量
ping $URL -c 6
列出网络上所有活动主机
当涉及大型局域网时,可能需要检查网络上的其他主机的活动状态。
一台非活动主机可能是:没有开机;网络连接有问题;主机禁ping;防火墙问题。
当我们要检测ip时,在一个脚本中,每一次ping
都是依次执行。即使所有的ip地址都是彼此独立,由于编写的是顺式程序(sequential program),ping
命令也只能按顺序执行。每次执行一个ping
命令。都要经历一段延迟——“发送echo分组,并接收或等待回应超时”。
要是处理几百个ip地址的话,这个延时就真不短了。我们可以使用并行方式来加速所有ping命令的执行。
可以将ping
命令中的循环体放入( )& 中,( ) 使其中的命令可作为子shell来执行,& 使之在后台继续运行。
#编写一个并行方式的ping脚本
fo ip in 192.168.1.{1..255}
do
(
ping $ip -c2 &> /dev/null;
if[ $? -eq 0 ]
then
echo "$ip is alive"
fi
)&
wait
done
#wait命令是脚本只有在所有子进程或后台进程全部终止或完成后才能结束
#使用fping,-a显示活动主机,-g生成目标列表,-u显示无法到达主机
fping -a 192.168.0.0/24 -g 2> /dev/null
fping -a 192.168.0.1 192.168.3.255 -g 2> ./unreach.txt
#将unreach主机找出
cat unreach.txt | egrep -o "to [0-9.]+$" | grep -o "[0-9.]*"
传输文件
有很多不同的方法可以在网络节点上传输文件,常见的协议有FTP, SFTP, RSYNC, SCP。
通过FTP传输文件可使用lftp
命令;
通过SSH传输文件可使用sftp
;
RSYNC使用SSH
与rsync
命令;
scp
通过SSH进行传输。
文件传输协议(File Transfer Protocol, FTP),使用21端口。FTP是明文传输,So...
需要远程主机上启用了FTP服务器才能使用FTP。
lftp user@ftp-host
#输入密码后便可以操作如下命令
cd -- lcd(本地)
mkdir
get filename #下载文件
put filename #上传文件
quit #退出
SFTP(Secure FTP,安全FTP),运行在SSH连接之上。利用SSH连接模拟FTP接口。
它不需要源端运行FTP服务器,不要运行OpenSSH。SFTP是一个交互式命令,提供了命令提示符。
rsync广泛用于网络文件与系统快照的备份。
SCP(Secure Copy,安全复制),远程文件复制工具。通过SSH加密通过进行传输。
scp SOURCE DESTINATION
scp /path/file user@host:PATH
scp usr@host:/dir/file /home/zhang
#需要输入密码,可以用SSH无秘钥认证
#-r递归复制,-p保持文件权限和模式
scp -r /etc user@host:/tmp
scp -rp user@host:/var/www /var
SSH无秘钥认证
特别是在定时任务传输备份文件时,无秘钥认证就很方便了。SSH服务默认在22端口,你可以在配置文件中修改。
具体步骤:
- 创建SSH密钥(公钥和私钥);
- 将客户端公钥上传给需要连接的主机,并写入~/.ssh/authorized_keys文件;
- 修改相关目录和文件权限(目录700,文件644);
ssh-keygen -t rsa
#后续操作默认即可
#生成~/.ssh/id_rsa.pub和id_rsa
#写入远程主机
ssh user@host "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
用SSH在远程主机上运行命令
#连接远程主机
ssh user@host
#非默认端口
ssh user@host -p 2211
#在远程主机中运行命令
ssh user@host 'command'
ssh user@host 'cmd1'; 'com2'...
ssh user@host 'whoami'
#-C压缩功能,当带宽有限时
ssh -C user@host 'cmd'
在本地挂载远程驱动器
在执行读写数据操作时,通过本地挂载远程主机文件系统。利用SSH和sshfs来实现这一功能。
sshfs是FUSE文件系统的一个扩展,FUSE允许其支持的操作系统像使用本地文件系统一样挂载各类数据。
sshfs
允许将远程文件系统挂载到本地挂载点上。
相当于便捷的NFS,但并不需要搭建NFS服务。
SSHFS - filesystem client based on ssh
#挂载远程文件到本地
ssh user@host:PATH /mnt/sshfs
umout /mnt/sshfs
网络流量和端口分析
应用程序在主机上打开端口,然后与远程主机中打开的端口实现通信。
出于安全方面的考虑,必须留意系统中打开及关闭的端口。
恶意软件和rootkit可能会利用特定的端口及服务运行在系统之中,从而进行攻击。
通过分析开放端口列表以及运行在端口上的服务,我们便可以分析并检查恶意软件,保证主机安全。
了解及使用各种端口分析工具。
lsof - list open files
lsof
列出系统中开放端口以及运行在端口上的服务的详细信息;
netstat查看开放端口与服务
netstat
- 显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员组;
iftop - display bandwidth usage on an interface by host
iftop
- 展示带宽使用情况;
ifstat - handy utility to read network interface statistics
ifstat
- 展示某时刻网络状态;
nload - displays the current network usage
nload
- 可查看系统总带宽;
nethogs - Net top tool grouping bandwidth per process
nethogs
- 可查看每个进程流量情况;
ethtool - query or control network driver and hardware settings
ethtool
- 检查网卡支持的带宽
#lsof的每一项都对应着一个打开了特定端口的服务
lsof -i
#查看开放端口和服务
netstat -nltp
#查看网络实时状态
iftop
#查看当前网络状态
ifstat
#查看系统带宽
nload
#查看进程流量
nethogs