天天看點

BASH SHELL下兩個用于檢查端口情況的腳本

這幾天需要做Linux的TCP端口檢查腳本,發現netstat、nc指令雖好,但不夠直覺,而且端口多了檢查起來有點麻煩,動手學做了兩個腳本。一個是用參數形式檢查端口情況,另一個使用配置檔案掃描端口。記錄下來友善以後使用。

一、nc_check.sh

1

2

3

4

5

6

7

8

9

10

<code>#!/bin/bash</code>

<code>cat</code> <code>.</code><code>/check_port</code><code>|</code><code>while</code> <code>read</code> <code>line</code>

<code>do</code>

<code> </code><code>nc -z `</code><code>uname</code> <code>-n` $line &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code> </code><code>if</code> <code>[ $? -</code><code>eq</code> <code>0 ];</code><code>then</code>

<code>  </code><code>echo</code> <code>"$line OK."</code>

<code> </code><code>else</code>

<code>  </code><code>echo</code> <code>"$line Failed."</code>

<code> </code><code>fi</code>

<code>done</code>

使用前在目前目錄下建立一個check_port的檔案,内容為:

<code>cat</code> <code>check_port</code>

<code>123</code>

<code>345</code>

<code>456</code>

所有TCP檢測端口按照每行一個記錄到檔案内。執行效果:

<code>[root@ABC ~]</code><code>#. nc_check</code>

<code>123 OK</code>

<code>345 OK</code>

<code>456 Failed</code>

程式把清單内所有端口檢查一遍,成功的OK,失敗的Failed

二、netstat_check.sh

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<code>declare</code> <code>-a CHK_TCP_CMD=`</code><code>netstat</code> <code>-tln|</code><code>egrep</code> <code>0.0.0.0|</code><code>awk</code> <code>'{print $4}'</code><code>|</code><code>awk</code> <code>-F: </code><code>'{print $2}'</code><code>|</code><code>sort</code> <code>-n`</code>

<code>declare</code> <code>-a PORT_NO_EXISTS</code>

<code>declare</code> <code>-i CURRENT_PORT=0</code>

<code>for</code> <code>TCP_PORT </code><code>in</code> <code>$@</code>

<code> </code><code>#IS NUMBER</code>

<code> </code><code>expr</code> <code>"$TCP_PORT"</code> <code>+ 0 &gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code> </code><code>if</code> <code>[ </code><code>"$?"</code> <code>!= </code><code>"0"</code> <code>];</code><code>then</code>

<code>  </code><code>echo</code> <code>"$TCP_PORT not a number."</code>

<code>  </code><code>exit</code> <code>1</code>

<code> </code><code>PORT_NO_EXISTS[$CURRENT_PORT]=$TCP_PORT</code>

<code> </code><code>for</code> <code>LSN_PORT </code><code>in</code> <code>$CHK_TCP_CMD</code>

<code>  </code><code>do</code>

<code>  </code><code>if</code> <code>[ $TCP_PORT == $LSN_PORT ];</code><code>then</code>

<code>   </code><code>unset</code> <code>PORT_NO_EXISTS[$CURRENT_PORT]</code>

<code>   </code><code>break</code>

<code>  </code><code>fi</code>

<code>  </code><code>done</code>

<code> </code><code>((CURRENT_PORT++))</code>

<code>if</code> <code>[ ${</code><code>#PORT_NO_EXISTS[@]} -gt 0 ];then</code>

<code> </code><code>echo</code> <code>"TCP ports ${PORT_NO_EXISTS[@]} failed."</code>

<code> </code><code>exit</code> <code>1</code>

<code>fi</code>

<code>exit</code> <code>0</code>

使用時直接在腳本後添加端口号作為參數,若掃描多個端口号,則每個端口号以空格隔開。若其中一個參數非數字,則程式終止。執行效果:

<code>[root@ABC ~]</code><code>#./netstat_check.sh 789</code>

掃描到的端口無輸出。

<code>[root@ABC ~]</code><code>#./netstat_check.sh 123 456 789</code>

<code>TCP port 123 456 failed.</code>

程式把所有失敗的端口羅列出來。

<code>[root@ABC ~]</code><code>#./netstat_check.sh 123 hello 456</code>

<code>hello not a number.</code>

不是數字的程式輸出錯誤。

本文轉自 gole_huang 51CTO部落格,原文連結:http://blog.51cto.com/golehuang/1768264

繼續閱讀