《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