天天看點

第十一章 Shell常用指令與工具(二)

<a href="https://s5.51cto.com/wyfs02/M00/8E/A1/wKioL1jHiVzgBbL6AAAi8p_X3UM051.png" target="_blank"></a>

功能:非互動式網絡下載下傳,類似于HTTP用戶端

常用選項:

-b,  --background         背景運作

日志記錄和輸入檔案:

-o,  --output-file=FILE      日志寫到檔案

-a, --append-output=FILE     日志追加到檔案

-d,  --debug              列印debug資訊,會包含頭資訊

-q,  --quiet              退出,不輸出

-i,  --input-file=FILE      從檔案中讀取URL下載下傳

下載下傳選項:

-t,  --tries=NUMBER         設定連結重試次數

-O, --output-document=FILE     寫入内容到檔案

-nc, --no-clobber            跳過下載下傳現有的檔案

-c,  --continue            斷點續傳

--progress=TYPE             設定進度條(dot和bar)

-S,  --server-response        列印伺服器響應頭資訊

--spider             不下載下傳任何内容

-T, --timeout=SECONDS    設定相應逾時時間(還有--dns-timeout、--connect-timeout和--read-timeout)

-w,  --wait=SECONDS     兩次重試間隔等待時間

--bind-address=ADDRESS    設定綁定位址

--limit-rate=RATE      限制下載下傳速度

--user=USER         設定ftp和http使用者名

--password=PASS       設定ftp和http密碼

目錄:

-P, --directory-prefix=PREFIX  儲存檔案目錄

HTTP選項:

--http-user=USER     設定http使用者名

--http-password=PASS   設定http密碼

--proxy-user=USER     設定代理使用者名

--proxy-password=PASS  設定代理密碼

--referer=URL       設定Referer

--save-headers      儲存頭到檔案

--default-page=NAME    改變預設頁面名字,預設index.html

-U,--user-agent=AGENT  設定用戶端資訊

--no-http-keep-alive   禁用HTTP keep-alive(長連接配接)

--load-cookies=FILE    從檔案加載cookies

--save-cookies=FILE    儲存cookies到檔案

--post-data=STRING     使用POST方法,發送資料

FTP選項:

--ftp-user=USER      設定ftp使用者名

--ftp-password=PASS    設定ftp密碼

--no-passive-ftp      禁用被動傳輸模式

遞歸下載下傳:

-r, --recursive       指定遞歸下載下傳

-l, --level=NUMBER     最大遞歸深度

-A, --accept=LIST      逗号分隔下載下傳的擴充清單

-R, --reject=LIST      逗号分隔不被下載下傳的擴充清單

-D, --domains=LIST     逗号分隔被下載下傳域的清單

--exclude-domains=LIST   排除不被下載下傳域的清單

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<code>下載下傳單個檔案到目前目錄:</code>

<code># wget http://nginx.org/download/nginx-1.11.7.tar.gz</code>

<code>放到背景下載下傳:</code>

<code># wget -b http://nginx.org/download/nginx-1.11.7.tar.gz</code>

<code>對于網絡不穩定的使用者使用-c和--tries參數,保證下載下傳完成,并下載下傳到指定目錄:</code>

<code># wget -t 3 -c http://nginx.org/download/nginx-1.11.7.tar.gz -P down</code>

<code>不下載下傳任何内容,判斷URL是否可以通路:</code>

<code># wget --spider http://nginx.org/download/nginx-1.11.7.tar.gz</code>

<code>下載下傳内容寫到檔案:</code>

<code># wget http://www.baidu.com/index.html -O index.html</code>

<code>從檔案中讀取URL下載下傳:</code>

<code># wget -i url.list</code>

<code>下載下傳</code><code>ftp</code><code>檔案:</code>

<code># wget --ftp-user=admin --ftp-password=admin ftp://192.168.1.10/ISO/CentOS-6.5-i386-minimal.iso</code>

<code>僞裝用戶端,指定user-agent和referer下載下傳:</code>

<code># wget -U "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --referer "http://nginx.org/en/download.html" http://nginx.org/download/nginx-1.11.7.tar.gz</code>

<code>檢視HTTP頭資訊:</code>

<code># wget -S http://nginx.org/download/nginx-1.11.7.tar.gz</code>

<code># wget --debug http://nginx.org/download/nginx-1.11.7.tar.gz</code>

部落格位址:http://lizhenliang.blog.51cto.com

QQ群:323779636(Shell/Python運維開發群)

功能:發送資料到URL,類似于HTTP用戶端

-C, --continue-at  斷點續傳

-b, --cookie STRING/FILE 從檔案中讀取cookie

-c, --cookie-jar   把cookie儲存到檔案

-d, --data       使用POST方式發送資料

--data-urlencode   POST的資料URL編碼

-F, --form       指定POST資料的表單

-D, --dump-header  儲存頭資訊到檔案

--ftp-pasv      指定FTP連接配接模式PASV/EPSV

-P, --ftp-port    指定FTP端口

-L, --location    遵循URL重定向,預設不處理

-l, --list-only   指列出FTP目錄名

-H, --header     自定義頭資訊發送給伺服器

-I, --head      檢視HTTP頭資訊

-o, --output FILE   輸出到檔案

-#, --progress-bar  顯示bar進度條

-x, --proxy[PROTOCOL://]HOST[:PORT]  使用代理

-U, --proxy-userUSER[:PASSWORD] 代理使用者名和密碼

-e, --referer      指定引用位址referer

-O, --remote-name  使用遠端伺服器上名字寫到本地

--connect-timeout  連接配接逾時時間,機關秒

--retry NUM      連接配接重試次數

--retry-delay     兩次重試間隔等待時間

-s, --silent      靜默模式,不輸出任何内容

-Y, --speed-limit  限制下載下傳速率

-u, --user USER[:PASSWORD] 指定http和ftp使用者名和密碼

-T, --upload-file   上傳檔案

-A, --user-agent   指定用戶端資訊

20

21

22

<code>下載下傳頁面:</code>

<code># curl -o badu.html http://www.baidu.com</code>

<code>不輸出下載下傳資訊:</code>

<code># curl -s -o baidu.html http://www.baidu.com</code>

<code># curl -A "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" -e "baike.baidu.com" http://127.0.0.1</code>

<code>模拟使用者登入,并儲存cookies到檔案:</code>

<code># curl -c ./cookies.txt -F NAME=user -F PWD=123 http://www.example.com/login.html</code>

<code>使用cookie通路:</code>

<code># curl -b cookies.txt http://www.baidu.com</code>

<code>通路HTTP認證頁面:</code>

<code># curl -u user:pass http://www.example.com</code>

<code>FTP上傳檔案:</code>

<code># curl -T filename ftp://user:pass@ip/a.txt</code>

<code># curl ftp://ip -u user:pass-T filename</code>

<code>FTP下載下傳檔案:</code>

<code># curl -O ftp://user:pass@ip/a.txt</code>

<code># curl ftp://ip/filename -u user:pass -o filename</code>

<code>FTP下載下傳多個檔案:</code>

<code># curl ftp://ip/img/[1,3,5].jpg</code>

<code># curl -I http://www.baidu.com</code>

功能:基于SSH的安全遠端伺服器檔案拷貝

-i  指定私鑰檔案

-l  限制速率,機關Kb/s,1024Kb=1Mb

-P  指定遠端主機SSH端口

-p  儲存修改時間、通路時間和權限

-r  遞歸拷貝目錄

-o  SSH選項,有以下常用的:

ConnectionAttempts=NUM  連接配接失敗後重試次數

ConnectTimeout=SEC       連接配接逾時時間

StrictHostKeyChecking=no  自動拉去主機key檔案

PasswordAuthentication=no 禁止密碼認證

<code>本地目錄推送到遠端主機:</code>

<code># scp -P 22 -r src_dir [email protected]:/dst_dir</code>

<code>遠端主機目錄拉取到本地:</code>

<code># scp -P 22 [email protected]:dst_dir src_dir</code>

<code>同步檔案方式一樣,不用加-r參數</code>

功能:遠端或本地檔案同步工具

-v  顯示複制資訊

-q  不輸出錯誤資訊

-c  跳過基礎效驗,不判斷修改時間和大小

-a  歸檔模式,等效-rlptgoD,保留權限、屬組等

-r  遞歸目錄

-l  拷貝軟連接配接

-z  壓縮傳輸資料

-e  指定遠端shell,比如ssh、rsh

--progress           進度條,等同-P

--bwlimit=KB/s       限制速率,0為沒有限制

--delete            删除那些DST中SRC沒有的檔案

--exclude=PATTERN      排除比對的檔案或目錄

--exclude-from=FILE    從檔案中讀取要排除的檔案或目錄

--password-file=FILE    從檔案讀取遠端主機密碼

--port=PORT          監聽端口

<code>本地複制目錄:</code>

<code># rsync -avz abc /opt</code>

<code># rsync -avz SRC [email protected]:DST</code>

<code>遠端主機目錄拉取到本地: </code>

<code># rsync -avz [email protected]:SRC DST</code>

<code>保持遠端主機目錄與本地一樣:</code>

<code># rsync -avz --delete SRC [email protected]:DST</code>

<code>排除某個目錄:</code>

<code># rsync -avz --exclude=no_dir SRC [email protected]:DST</code>

<code>指定SSH端口:</code>

<code># rsync -avz /etc/hosts -e "ssh -p22" [email protected]:/opt</code>

功能:運作指令,忽略所有挂起信号

<code>背景運作程式,終端關閉不影響:</code>

<code># nohup bash test.sh &amp;&gt;test.log &amp;</code>

功能:将檔案内容字元集轉成其他字元集

-l  列出所有已知的編碼字元集

-f  編碼原始文本

-t  輸出的編碼格式

-o  輸出到檔案

-s  不輸出警告

<code>将檔案内容轉換UTF8:</code>

<code># iconv -f gbk -t utf8 old.txt -o new.txt</code>

<code>将csv檔案轉換GBK:</code>

<code># iconv -f utf8 -t gbk old.txt -o new.txt</code>

<code>解決郵件亂碼:</code>

<code># echo $(echo "content" | iconv -f utf8 -t gbk) | mail -s "$(echo "title" | iconv -f utf8 -t gbk)" [email protected]</code>

功能:列印系統資訊

-a  列印所有資訊

-s  列印核心名稱

-n  列印主機名

-r  列印核心發行版

-v  列印核心版本

-m  列印機器硬體名

-p  列印處理器類型

-i  列印硬體平台

-o  列印作業系統

<code>列印所有系統資訊:</code>

<code># uname -a</code>

<code>列印主機名:</code>

<code>列印核心版本:</code>

<code># uname -r</code>

<code>列印作業系統:</code>

<code># uname -o</code>

功能:非互動SSH登入(需要安裝)

-f  從檔案中擷取密碼

-d  用數字檔案描述符擷取密碼

-p  密碼作為參數

-e  密碼作為環境變量傳遞,變量名是SSHPASS

<code>免互動SSH登入:</code>

<code># sshpass -p 123456 ssh [email protected]</code>

<code>免互動傳輸檔案:</code>

<code># sshpass -p 123456 scp a.txt 192.168.1.10:/root</code>

<code>密碼傳入系統變量:</code>

<code># SSHPASS=123456 rsync -avz /etc/hosts -e "sshpass -e ssh" [email protected]:/opt</code>

功能:歸檔目錄或檔案

-c  建立新歸檔

-d  比較歸檔和檔案系統的差異

-r  追加檔案到歸檔

-t  存檔的内容清單

-x  提取歸檔所有檔案

-C  改變解壓目錄

-f  使用歸檔檔案或裝置歸檔

-j  bzip2壓縮

-z  gzip壓縮

-v  輸出處理過程

<code>建立歸檔檔案來自foo和bar:</code>

<code># tar -cf archive.tar foo bar</code>

<code>提取歸檔的所有檔案:</code>

<code># tar -xf archive.tar</code>

<code>建立歸檔并</code><code>gzip</code><code>壓縮:</code>

<code># tar -zcvf archive.tar.gz log</code>

<code>提取歸檔檔案并</code><code>gzip</code><code>解壓:</code>

<code># tar -zxvf log.tar.gz </code>

<code>建立歸檔并</code><code>bzip2</code><code>壓縮:</code>

<code># tar -jcvf log.tar.bz log</code>

<code>列出所有在archive.</code><code>tar</code><code>的檔案:</code>

<code># tar -tvf archive.tar</code>

<code>提取歸檔并解壓到指定目錄:</code>

<code># tar -zxvf log.tar.gz -C /opt</code>

功能:系統日志的shell指令行接口

-i  每行記錄程序ID

-f  指定輸出日志到檔案

-p  設定記錄的優先級

-t  添加标簽

<code># logger -i -t "my_test" -p local3.notice "test_info"</code>

功能:列印網絡連接配接、路由表、接口統計資訊、僞裝連接配接和多點傳播成員

-r  顯示路由表

-i  顯示接口表

-n  不解析名字

-p  顯示程式名 PID/Program

-l  顯示監聽的socket

-a  顯示所有socket

-o  顯示計時器

-Z  顯示上下文

-t  隻顯示tcp連接配接

-u  隻顯示udp連接配接

-s  顯示每個協定統計資訊

<code>顯示所有監聽:</code>

<code># netstat -anltu</code>

<code>顯示所有TCP連接配接:</code>

<code># netstat -antp</code>

<code>顯示所有UDP連接配接:</code>

<code># netstat -anup</code>

<code>顯示路由表:</code>

<code># netstat -r</code>

功能:比netstat更強大的socket檢視工具

格式:ss [options] [ FILTER ]

-l  顯示所有監聽的socket

-e  顯示socket詳細資訊

-m  顯示socket記憶體使用

-p  顯示程序使用的socket

-i  顯示内部TCP資訊

-s  顯示socket使用彙總

-4  隻顯示IPV4的socket

-0  顯示包socket

-t  隻顯示TCP socket

-u  隻顯示UDP socket

-d  隻顯示DCCP socket

-w  隻顯示RAW socket

-x  隻顯示Unix域socket

-f  FAMILY 隻顯示socket族類型( unix, inet,inet6, link, netlink)

-A  查詢socket{all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]

-D  将原始的TCP socket轉儲到檔案

-F  從檔案中讀取過濾資訊

過濾:

-o  state  顯示TCP連接配接狀态資訊

<code># ss -t -a</code>

<code># ss -u –a</code>

<code>顯示socket使用彙總:</code>

<code># ss -s</code>

<code>顯示所有建立的連接配接:</code>

<code># ss -o state established</code>

<code>顯示所有的TIME-WAIT狀态:</code>

<code># ss -o state TIME-WAIT</code>

<code>搜尋所有本地程序連接配接到X Server:</code>

<code># ss -x src /tmp/.X11-unix/*</code>

功能:列出打開的檔案

-i [i]  監聽的網絡位址,如果沒有指定,預設列出所有。[i] 來自[46][protocol][@hostname|hostaddr][:service|port]

-U  列出Unix域socket檔案

-p  指定PID

-u  指定使用者名或UID所有打開的檔案

+D  遞歸搜尋

23

24

<code>列出所有打開的檔案:</code>

<code># lsof</code>

<code>檢視哪個程序占用檔案:</code>

<code># lsof /etc/passwd</code>

<code>列出所有打開的監聽位址和unix域socket檔案:</code>

<code># lsof -i -U</code>

<code>列出80端口監聽的程序:</code>

<code># lsof -i:80</code>

<code>列出端口1-1024之間的所有程序:</code>

<code># lsof -i:1-1024</code>

<code>列出所有TCP網絡連接配接:</code>

<code># lsof -i tcp</code>

<code>列出所有UDP網絡連接配接:</code>

<code># lsof -i udp</code>

<code>根據檔案描述符列出打開的檔案:</code>

<code># lsof -d 1</code>

<code>列出某個目錄被打開的檔案:</code>

<code># lsof +D /var/log</code>

<code>列出程序ID打開的檔案:</code>

<code># lsof -p 5373</code>

<code>打開所有登入使用者名abc或user </code><code>id</code> <code>1234,或PID 123或PID 456:</code>

<code># lsof -p 123,456 -u 123,abc</code>

<code>列出COMMAND列中包含字元串sshd:</code>

<code># lsof -c sshd</code>

功能:報告目前程序的快照

-a  顯示所有程序

-u  選擇有效的使用者ID或名稱

-x  顯示無控制終端的程序

-e  顯示所有程序

-f  全格式

-r  隻顯示運作的程序

-T  這個終端的所有程序

-p  指定程序ID

--sort  對某列排序

-m  線程

-L  格式化代碼清單

-o  使用者自定義格式

CODE  NORMAL   HEADER

%C    pcpu     %CPU

%G    group    GROUP

%P    ppid     PPID

%U    user     USER

%a    args     COMMAND

%c    comm     COMMAND

%g    rgroup   RGROUP

%n    nice     NI

%p    pid      PID

%r    pgid     PGID

%t    etime    ELAPSED

%u    ruser    RUSER

%x    time     TIME

%y    tty      TTY

%z     vsz      VSZ

<code>列印系統上所有程序标準文法:</code>

<code># ps -ef</code>

<code>列印系統上所有程序BSD文法:</code>

<code># ps aux</code>

<code>列印程序樹:</code>

<code># ps axjf 或 ps -ejH</code>

<code>檢視程序啟動的線程:</code>

<code># ps -Lfp PID</code>

<code>檢視目前使用者的程序數:</code>

<code># ps uxm 或 ps -U root -u root u </code>

<code>自定義格式顯示并對CPU排序:</code>

<code># ps -eo user,pid,pcpu,pmem,nice,lstart,time,args --sort=-pcpu</code>

<code>或 </code><code>ps</code> <code>-eo </code><code>"%U %p %C %n %x %a"</code>

功能:動态顯示活動的程序和系統資源使用率

-d  資訊重新整理時間間隔

-p  隻監控指定的程序PID

-i  隻顯示正在使用CPU的程序

-H  顯示線程

-u  隻檢視指定使用者名的程序

-b  将輸出編排成易處理格式,适合輸出到檔案處理

-n  指定最大循環重新整理數

互動指令:

f  添加或删除顯示的名額

c  顯示完整指令

P  按CPU使用百分比排序

M  按駐留記憶體大小排序

T  按程序使用CPU時間排序

1  顯示每個CPU核心使用率

k  終止一個程序

<code>重新整理一次并輸出到檔案:</code>

<code># top -b -n 1 &gt; top.log</code>

<code>隻顯示指定程序的線程:</code>

<code># top -Hp 123</code>

<code>傳入互動指令,按CPU排序</code>

功能:檢視記憶體使用率

-b  bytes顯示

-k  KB顯示

-m  M顯示

-g  G顯示

-h  易讀機關顯示

-s  每幾秒重複列印

-c  重複列印幾次退出

<code>檢視實體記憶體:</code>

<code># free -m</code>

<code>易讀機關顯示:</code>

<code># free -h</code>

功能:檢視檔案系統的磁盤空間使用情況

-a  包含虛拟檔案系統

-h  可易讀機關顯示

-i  顯示block使用的inode資訊

-P  使用POSIX格式輸出

-t  輸出指定檔案系統類型

-T  列印檔案系統類型

<code>檢視所有檔案系統:</code>

<code># df -ah</code>

<code>輸出指定檔案系統:</code>

<code># df -t xfs</code>

功能:報告虛拟記憶體、swap、io、上下文和CPU統計資訊。

分析了這些檔案:

/proc/meminfo

/proc/stat

/proc/*/stat

-a  列印活躍和不活躍的記憶體頁

-d  列印硬碟統計資訊

-D  列印硬碟表

-p  列印硬碟分區統計資訊

-s  列印虛拟記憶體表

-m  列印記憶體配置設定(slab)資訊

-t  添加時間戳到輸出

-S  顯示機關,預設k、KB、m、M,大寫是*1024

<code>分析系統性能:</code>

<code># vmstat</code>

<code>每秒重新整理一次,統計五次:</code>

<code># vmstat -t 1 5 11.49 iostat</code>

功能:報告CPU使用率和磁盤I/O

-c  顯示CPU使用率

-d  隻顯示磁盤使用率

-k  機關KB/s代替Block/s

-m  機關MB/s代替Block/s

-N  顯示所有映射裝置名字

-t  列印報告時間

-x  顯示擴充統計資訊

<code>顯示CPU使用率:</code>

<code># iostat -c 1 3</code>

<code>顯示I</code><code>/O</code><code>磁盤統計資訊:</code>

<code># iostat -d -x -k 1 3  # 間隔1秒,輸出3次</code>

功能:檢視系統資源綜合方面使用率

-u, CPU

-r, memory

-b, disk

-n DEV, NIC traffic

-q, systemload

-b, TPS(Transaction Per Second,每秒事務處理量)

-o, output to file

<code># sar -u 2 3 #每兩秒執行一次,采集三次</code>

<code># sar -u 2 3 -o cpu.out</code>

<code># sar -f cpu.out #讀取檔案</code>

-c, CPU

-d, disk

-m, memory(實際記憶體使用)

-n, net

-s, swap

-l, systemload

--tcp, tcp stats

--udp, udp stats

plugins:

--list  檢視支援的插件

--disk-util

--disk-tps

--top-bio    檢視最高block I/O程序

--top-bio-adv  檢視最高block I/O程序,包括pid、r、w

--top-io

--top-io-adv

--top-cpu    檢視最高使用CPU程序

--top-cpu-adv  檢視最高CPU程序

--top-mem    檢視最高使用記憶體程序

<code>檢視CPU使用率:</code>

<code># dstat –c</code>

<code>檢視TCP連接配接狀态:</code>

<code># dstat --tcp</code>

功能:檢視/操作路由表,裝置,路由政策和隧道

格式:ip [ OPTIONS] OBJECT { COMMAND | help }

-b, -batch&lt;FILENAME&gt;  從檔案或标準輸入讀取指令并調用他們,第一次失敗将終止

-force               批量模式有錯誤不終止,如果有錯誤則狀态傳回非0

-s, -statistics      輸出更多的統計資訊

-l, -loops&lt;COUNT&gt;  指定最大的循環數

操作對象(OBEJECT):

address  網絡裝置位址

12tp     以太網IP隧道

link     配置網絡裝置

maddress   多點傳播位址

monitor   動态監控網絡連接配接

mroute    多點傳播路由緩存條目

mrule     角色在多點傳播路由政策資料庫

neighbour  管理ARP或NDISC緩存條目

netns     管理網絡命名空間

ntable    管理neighbour緩存操作

route     路由表

rule     角色在路由政策資料庫

tpc_metrics/tcpmetrics管理TCP名額

tunnel   IP隧道

tuntap   管理TUN/TAP裝置

xfrm    管理IPSec政策

可通過ip OBEJECT help再檢視對象的操作方法。

<code>檢視網絡裝置位址:</code>

<code># ip addr</code>

<code>檢視網卡統計資訊:</code>

<code># ip -s link</code>

<code>檢視單個網卡統計資訊:</code>

<code># ip -s link ls eth0</code>

<code>檢視ARP快取記錄:</code>

<code># ip neighbour</code>

<code>檢視路由表:</code>

<code># ip route</code>

<code>檢視路由政策:</code>

<code># ip rule</code>

<code>網卡設定/删除IP:</code>

<code># ip addr add/del 192.168.1.201/24 dev eth0</code>

<code>添加/删除預設路由:</code>

<code># ip route add/del default via 192.168.1.1</code>

<code>開啟/關閉網卡:</code>

<code># ip link set dev eth0 up/down</code>

<code>設定最大傳輸單元:</code>

<code># ip link set dev eth0 mtu 1500</code>

<code>設定MAC位址:</code>

<code># ip link set dev eth0 address 00:0c:29:52:73:8e</code>

功能:TCP和UDP連接配接和監聽

-i interval 指定間隔時間發送和接受行文本

-l  監聽模式,管理傳入的連接配接

-n  不解析域名

-p  指定本地源端口

-r  指定本地和遠端主機端口

-s  指定本地源IP位址

-u  使用udp協定,預設是tcp

-v  執行過程輸出

-w  timeout 連接配接逾時時間

-x  proxy_address[:port]  請求連接配接主機使用代理位址和端口

-z  指定掃描監聽端口,不發送任何資料

25

26

27

28

29

30

31

32

33

<code>端口掃描:</code>

<code># nc -z 192.168.1.10 1-65535</code>

<code>TCP協定連接配接到目标端口:</code>

<code># nc -p 31337 -w 5 192.168.1.10 22</code>

<code>UDP協定連接配接到目的端口:</code>

<code># nc -u 192.168.1.10 53</code>

<code>指定本地IP連接配接:</code>

<code># nc -s 192.168.1.9 192.168.1.10 22</code>

<code>探測端口是否開啟:</code>

<code># nc -z -w 2 192.168.1.10 22</code>

<code>建立監聽Unix域Socket:</code>

<code># nc -lU /var/tmp/ncsocket</code>

<code>通過HTTP代理連接配接主機:</code>

<code># nc -x10.2.3.4:8080 -Xconnect 10.0.0.10 22 </code>

<code>監聽端口捕獲輸出到檔案:</code>

<code># nc -l 1234 &gt; filename.out</code>

<code>從檔案讀入到指定端口:</code>

<code># nc host.example.com 1234 &lt; filename.in</code>

<code>收發資訊:</code>

<code># nc -l 1234</code>

<code># nc 127.0.0.1 1234</code>

<code>執行memcahced指令:</code><code>printf</code> <code>"stats\n"</code> <code>|nc 127.0.0.1 11211</code>

<code>發送郵件:</code>

<code># nc [-C] localhost 25 &lt;&lt; EOF</code>

<code>           </code><code>HELO host.example.com</code>

<code>           </code><code>MAIL FROM: &lt;[email protected]&gt;</code>

<code>           </code><code>RCPT TO: &lt;[email protected]&gt;</code>

<code>           </code><code>DATA</code>

<code>           </code><code>Body of email.</code>

<code>           </code><code>.</code>

<code>           </code><code>QUIT</code>

<code>           </code><code>EOF</code>

<code># echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80</code>

功能:執行腳本時間

<code>檢視執行</code><code>ls</code><code>所需的時間:</code>

<code># time ls</code>

功能:

常見幾種類型防火牆?

包過濾防火牆:包過濾是IP層實作,包過濾根據資料包的源IP、目的IP、協定類型(TCP/UDP/ICMP)、源端口、目的端口等標頭資訊及資料包傳輸方向燈資訊來判斷是否允許資料包通過。

應用層防火牆:也稱為應用層代理防火牆,基于應用層協定的資訊流檢測,可以攔截某應用程式的所有封包,提取包内容進行分析。有效防止SQL注入或者XSS(跨站腳本攻擊)之類的惡意代碼。

狀态檢測防火牆:結合包過濾和應用層防火牆優點,基于連接配接狀态檢測機制,将屬于同一連接配接的所有包作為一個整體的資料流看待,構成連接配接狀态表(通信資訊,應用程式資訊等),通過規則表與狀态表共同配合,對表中的各個連接配接狀态判斷。

iptables是Linux下的配置防火牆的工具,用于配置Linux核心內建的IP資訊包過濾系統,使增删改查資訊包過濾表中的規則更加簡單。

iptables分為四表五鍊,表是鍊的容器,鍊是規則的容器,規則指定動作。

四表:

filter

用于包過濾

nat

網絡位址轉發

mangle

對特定資料包修改

raw

不做資料包連結跟蹤

五鍊:

INPUT

本機資料包入口

OUTPUT

本機資料包出口

FORWARD

經過本機轉發的資料包

PREROUTING

防火牆之前,修改目的位址(DNAT)

POSTROUTING

防火牆之後,修改源位址(SNAT)

表中的鍊:

INPUT、OUTPUT和FORWARD

PREROUTING、POSTROUTING和OUTPUT

PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD

PREROUTING和OUTPUT

指令格式:iptables [-t table] 指令 [chain] 比對條件 動作

指令

描述

-A,append

追加一條規則

-I,insert

插入一條規則,預設鍊頭,後跟編号,指定第幾條

-D,delete

删除一條規則

-F,flush

清空規則

-L,list

列出規則

-P,policy

設定鍊預設規則

-m,module

子產品,比如state、multiport

比對條件

-i

入口網卡

-o

出口網卡

-s

源位址

-d

目的位址

-p

協定類型

--sport

源端口

--dport

目的端口

動作

ACCEPT

允許資料包通過

DROP

丢棄資料包不做處理

REJECT

拒絕資料包,并傳回報錯資訊

SNAT

一般用于nat表的POSTROUTING鍊,進行源位址轉換

DNAT

一般用于nat表的PREROUTING鍊,進行目的位址轉換

MASQUERADE

動态源位址轉換,動态IP時使用

子產品

state

包狀态,有四個:NEW、RELATED、ESTABLISHED和INVALID

mac

源MAC位址

limit

包速率限制

multiport

多端口,以逗号分隔

iprange

端口範圍,以逗号分隔

示例:常用的規則配置方法

<code>iptables -F         </code><code># 清空表規則,預設filter表</code>

<code>iptables -t nat -F     </code><code># 清空nat表</code>

<code>iptables -A INPUT -p tcp --dport 22 -j ACCEPT    </code><code># 允許TCP的22端口通路</code>

<code>iptables -I INPUT -p udp --dport 53 -j ACCEPT    </code><code># 允許UDP的53端口通路,插入在第一條</code>

<code>iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT </code><code># 允許端口範圍通路</code>

<code>iptables -D INPUT -p tcp --dport 22:25 -j ACCEPT </code><code># 删除這條規則</code>

<code># 允許多個TCP端口通路</code>

<code>iptables -A INPUT -p tcp -m multiport --dports 22,80,8080 -j ACCEPT  </code>

<code>iptables -A INPUT -s 192.168.1.0</code><code>/24</code> <code>-j ACCEPT   </code><code># 允許192.168.1.0段IP通路</code>

<code>iptables -A INPUT -s 192.168.1.10 -j DROP       </code><code># 對1.10資料包丢棄</code>

<code>iptables -A INPUT -i eth0 -p icmp -j DROP       </code><code># eth0網卡ICMP資料包丢棄,也就是禁ping</code>

<code># 允許來自lo接口,如果沒有這條規則,将不能通過127.0.0.1通路本地服務</code>

<code>iptables -A INPUT -i lo -j ACCEPT   </code>

<code># 限制并發連接配接數,超過30個拒絕    </code>

<code>iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j REJECT   </code>

<code># 限制每個IP每秒并發連接配接數最大3個</code>

<code>iptables -I INPUT -p tcp --syn -m limit --limit 1</code><code>/s</code> <code>--limit-burst 3 -j ACCEPT           </code>

<code>iptables -A FORWARD -p tcp --syn -m limit --limit 1</code><code>/s</code> <code>-j ACCEPT</code>

<code># iptables伺服器作為網關時,内網通路公網</code>

<code>iptables –t nat -A POSTROUTING -s [内網IP或網段] -j SNAT --to [公網IP]      </code>

<code># 通路iptables公網IP端口,轉發到内網伺服器端口          </code>

<code>iptables –t nat -A PREROUTING -d [對外IP] -p tcp --dport [對外端口] -j DNAT --to [内網IP:内網端口] </code>

<code># 本地80端口轉發到本地8080端口  </code>

<code>iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080</code>

<code># 允許已建立及該連結相關聯的資料包通過            </code>

<code>iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT    </code>

<code># ASDL撥号上網                </code>

<code>iptables -t nat -A POSTROUTING -s 192.168.1.0</code><code>/24</code> <code>-o pppo -j MASQUERADE                   </code>

<code>iptables -P INPUT DROP  </code><code># 設定INPUT鍊預設操作丢棄所有資料包,隻要不符合規則的資料包都丢棄。注意要在最後設定,以免把自己關在外面!</code>

本文轉自 李振良OK 51CTO部落格,原文連結:http://blog.51cto.com/lizhenliang/1906324,如需轉載請自行聯系原作者