golang端口占用檢測的使用
在運(yùn)維開發(fā)的過程中,經(jīng)常碰到這樣的情況:啟動某個應(yīng)用前,需要先檢測一下端口是否被其他的應(yīng)用占用了,若占用了,能否得到占用進(jìn)程的PID。后續(xù)可以根據(jù)這個PID,查找是哪個應(yīng)用占據(jù)這端口,然后KILL掉。非常簡單的需求,思路是:
利用 netstat 命令獲取當(dāng)前的相關(guān)端口號的PID,然后正則表達(dá)式過濾出相關(guān)的PID即可
netstat -ano | findstr 8099
輸出如下:
以windows 系統(tǒng)下為例,linux系統(tǒng)下,修改相關(guān)參數(shù)即可。代碼如下:
// 傳入查詢的端口號 // 返回端口號對應(yīng)的進(jìn)程PID,若沒有找到相關(guān)進(jìn)程,返回-1 func portInUse(portNumber int) int { res := -1 var outBytes bytes.Buffer cmdStr := fmt.Sprintf("netstat -ano -p tcp | findstr %d", portNumber) cmd := exec.Command("cmd", "/c", cmdStr) cmd.Stdout = &outBytes cmd.Run() resStr := outBytes.String() r := regexp.MustCompile(`\s\d+\s`).FindAllString(resStr, -1) if len(r) > 0 { pid, err := strconv.Atoi(strings.TrimSpace(r[0])) if err != nil { res = -1 } else { res = pid } } return res }
補(bǔ):golang 實現(xiàn)端口掃描
對端口進(jìn)行掃描基于連接,在go中我們可以使用net.Dial進(jìn)行判斷,如果返回的結(jié)果沒有錯誤,那么這個端口就應(yīng)該是打開的,如果返回了錯誤,那么可以說明這個端口是關(guān)閉的,代碼如下
func ScanPort(protocol string, hostname string, port int) bool { fmt.Printf("scanning port %d \n", port) p := strconv.Itoa(port) addr := net.JoinHostPort(hostname, p) conn, err := net.DialTimeout(protocol, addr, 3*time.Second) if err != nil { return false } defer conn.Close() return true }
到此這篇關(guān)于golang端口占用檢測的使用的文章就介紹到這了,更多相關(guān)golang端口占用檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang命令行進(jìn)行debug調(diào)試操作
今天小編就為大家分享一篇關(guān)于,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04基于golang的簡單分布式延時隊列服務(wù)的實現(xiàn)
這篇文章主要介紹了基于golang的簡單分布式延時隊列服務(wù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02詳解golang channel有無緩沖區(qū)的區(qū)別
這篇文章主要給大家介紹了golang channel有無緩沖區(qū)的區(qū)別,無緩沖是同步的,有緩沖是異步的,文中通過代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下2024-01-01Golang實現(xiàn)Redis網(wǎng)絡(luò)協(xié)議實例探究
這篇文章主要為大家介紹了Golang實現(xiàn)Redis網(wǎng)絡(luò)協(xié)議實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Go?1.21.0?新增結(jié)構(gòu)化日志記錄標(biāo)準(zhǔn)庫log/slog使用詳解
這篇文章主要為大家介紹了Go?1.21.0?新增結(jié)構(gòu)化日志記錄標(biāo)準(zhǔn)庫log/slog使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Golang正整數(shù)指定規(guī)則排序算法問題分析
這篇文章主要介紹了Golang正整數(shù)指定規(guī)則排序算法問題,結(jié)合實例形式分析了Go語言排序算法操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2017-01-01