最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Linux中編寫shell腳本監(jiān)聽指定端口的實現(xiàn)方式

 更新時間:2025年12月29日 09:30:55   作者:學(xué)亮編程手記  
這篇文章主要介紹了在Linux中監(jiān)聽指定端口的幾種方法,包括使用netcat、socat、Python腳本等,并提供了每種方法的詳細(xì)步驟和示例腳本,需要的朋友可以參考下

在Linux中,你可以編寫一個shell腳本來監(jiān)聽指定端口。以下是幾種實現(xiàn)方式:

方法1:使用nc(netcat)的簡單監(jiān)聽腳本

#!/bin/bash
# 文件名:port_listener.sh

# 檢查參數(shù)
if [ $# -ne 1 ]; then
    echo "使用方法: $0 <端口號>"
    echo "示例: $0 8080"
    exit 1
fi

PORT=$1

echo "正在監(jiān)聽端口 $PORT ..."
echo "按 Ctrl+C 停止監(jiān)聽"

# 使用netcat監(jiān)聽端口
nc -l -p $PORT

# 如果上面的命令失敗,嘗試不帶-p參數(shù)的格式
if [ $? -ne 0 ]; then
    echo "嘗試另一種nc語法..."
    nc -l $PORT
fi

方法2:使用socat(功能更強大)

#!/bin/bash
# 文件名:port_listener_socat.sh

if [ $# -ne 1 ]; then
    echo "使用方法: $0 <端口號>"
    exit 1
fi

PORT=$1

echo "使用socat監(jiān)聽端口 $PORT"
echo "輸入將會顯示在終端,輸出將會發(fā)送回客戶端"

socat TCP-LISTEN:$PORT,fork EXEC:'/bin/cat'

方法3:使用Python的增強版腳本(推薦)

#!/bin/bash
# 文件名:port_listener_advanced.sh

# 顏色定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 檢查參數(shù)
if [ $# -lt 1 ] || [ $# -gt 2 ]; then
    echo -e "${GREEN}使用方法:${NC}"
    echo "  $0 <端口號> [協(xié)議]"
    echo "  <端口號>: 要監(jiān)聽的端口"
    echo "  [協(xié)議]: 可選,tcp 或 udp,默認(rèn)為 tcp"
    echo ""
    echo -e "${YELLOW}示例:${NC}"
    echo "  $0 8080          # 監(jiān)聽TCP端口8080"
    echo "  $0 8080 tcp      # 監(jiān)聽TCP端口8080"
    echo "  $0 53 udp        # 監(jiān)聽UDP端口53"
    exit 1
fi

PORT=$1
PROTOCOL=${2:-tcp}  # 默認(rèn)為TCP

# 檢查端口是否有效
if ! [[ "$PORT" =~ ^[0-9]+$ ]] || [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
    echo -e "${RED}錯誤: 端口號必須在1-65535之間${NC}"
    exit 1
fi

# 檢查協(xié)議是否有效
if [[ "$PROTOCOL" != "tcp" && "$PROTOCOL" != "udp" ]]; then
    echo -e "${RED}錯誤: 協(xié)議必須是 'tcp' 或 'udp'${NC}"
    exit 1
fi

# 檢查端口是否已被占用
echo -e "${YELLOW}檢查端口 $PORT 是否可用...${NC}"
if ss -tuln | grep -q ":$PORT "; then
    echo -e "${RED}錯誤: 端口 $PORT 已被占用${NC}"
    ss -tuln | grep ":$PORT "
    exit 1
fi

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}開始監(jiān)聽${NC}"
echo -e "端口: ${YELLOW}$PORT${NC}"
echo -e "協(xié)議: ${YELLOW}$PROTOCOL${NC}"
echo -e "時間: $(date)"
echo -e "主機: $(hostname)"
echo -e "IP地址: $(hostname -I 2>/dev/null || ip addr show | grep 'inet ' | grep -v '127.0.0.1' | head -1 | awk '{print $2}')"
echo -e "${GREEN}========================================${NC}"
echo -e "${YELLOW}按 Ctrl+C 停止監(jiān)聽${NC}"
echo ""

# 根據(jù)協(xié)議選擇監(jiān)聽方式
if [[ "$PROTOCOL" == "tcp" ]]; then
    # TCP監(jiān)聽
    echo "等待TCP連接..."
    nc -l -p $PORT -v
else
    # UDP監(jiān)聽
    echo "等待UDP數(shù)據(jù)包..."
    echo "注意: UDP是無連接的,可能需要使用特定工具發(fā)送數(shù)據(jù)"
    nc -u -l $PORT -v
fi

# 監(jiān)聽結(jié)束時顯示信息
echo ""
echo -e "${GREEN}監(jiān)聽已停止${NC}"
echo -e "結(jié)束時間: $(date)"

方法4:使用多個工具備選的腳本

#!/bin/bash
# 文件名:port_listener_universal.sh

PORT=$1

# 檢查工具是否可用
check_command() {
    command -v $1 >/dev/null 2>&1
}

echo "嘗試監(jiān)聽端口 $PORT"

# 按優(yōu)先級嘗試不同的工具
if check_command nc; then
    echo "使用 netcat (nc) 監(jiān)聽..."
    nc -l $PORT
elif check_command socat; then
    echo "使用 socat 監(jiān)聽..."
    socat TCP-LISTEN:$PORT,fork EXEC:'/bin/cat'
elif check_command python3; then
    echo "使用 Python3 監(jiān)聽..."
    python3 -c "
import socket
import sys

port = $PORT
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', port))
sock.listen(1)
print(f'Python監(jiān)聽端口 {port}...')
print('等待連接...')

while True:
    conn, addr = sock.accept()
    print(f'連接來自: {addr}')
    try:
        while True:
            data = conn.recv(1024)
            if not data:
                break
            print(f'收到: {data.decode()}')
            conn.sendall(data)  # 回聲
    except KeyboardInterrupt:
        print('\\n停止監(jiān)聽')
        break
    finally:
        conn.close()
sock.close()
"
else
    echo "錯誤: 沒有找到可用的監(jiān)聽工具"
    echo "請安裝以下任一工具:"
    echo "  1. netcat (nc)"
    echo "  2. socat"
    echo "  3. python3"
    exit 1
fi

使用方法:

保存腳本

nano port_listener.sh
# 復(fù)制粘貼上面的腳本內(nèi)容

添加執(zhí)行權(quán)限

chmod +x port_listener.sh

運行腳本

# 簡單監(jiān)聽
./port_listener.sh 8080

# 高級版(支持TCP/UDP)
./port_listener_advanced.sh 8080
./port_listener_advanced.sh 53 udp

# 通用版(自動選擇可用工具)
./port_listener_universal.sh 8080

測試連接:

在另一個終端測試連接:

# 使用telnet測試TCP
telnet localhost 8080

# 使用nc測試TCP
echo "Hello" | nc localhost 8080

# 使用nc測試UDP
echo "Hello UDP" | nc -u localhost 53

安裝必要工具(如果缺失):

# Ubuntu/Debian
sudo apt update
sudo apt install netcat socat python3

# CentOS/RHEL/Fedora
sudo yum install nc socat python3
# 或
sudo dnf install nc socat python3

到此這篇關(guān)于在Linux中編寫shell腳本監(jiān)聽指定端口的實現(xiàn)方式的文章就介紹到這了,更多相關(guān)Linux shell監(jiān)聽指定端口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Shell 參數(shù)傳遞的使用方法

    Shell 參數(shù)傳遞的使用方法

    本文主要介紹了Shell 參數(shù)傳遞的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • shell中exit 0和exit 1的區(qū)別有哪些

    shell中exit 0和exit 1的區(qū)別有哪些

    exit1和exit是shell中的兩個命令,用于退出當(dāng)前的shell進(jìn)程,本文就來介紹一下shell中exit 0和exit 1有哪些區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • 使用Linux命令行創(chuàng)建文件的方法

    使用Linux命令行創(chuàng)建文件的方法

    使用命令行創(chuàng)建文件時,可以選擇touch或echo命令,touch創(chuàng)建空文件,echo則可直接寫入內(nèi)容,編輯文件可用nano、vim等編輯器,驗證文件可用ls命令檢查,這些方法簡單易用,適合各種編程需求,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Linux Shell 變量的定義與使用方法詳解

    Linux Shell 變量的定義與使用方法詳解

    本文將深入淺出地講解Shell變量的方方面面,并通過與Java語言的對比,幫助你更直觀地理解其設(shè)計哲學(xué)與使用技巧,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Linux自定義防誤刪腳本的思路與測試

    Linux自定義防誤刪腳本的思路與測試

    相信很多朋友都遇到過在linux下誤刪除文件的時候,此刻的心中仿佛有無數(shù)的羊駝在奔騰,下面這篇文章主要給大家介紹了關(guān)于Linux自定義防誤刪腳本的思路與測試的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Linux Shell中三種引號的用法及區(qū)別

    Linux Shell中三種引號的用法及區(qū)別

    Linux Shell中有三種引號,分別為雙引號(" ")、單引號(' ')以及反引號(` `)。那么這三種引號有什么區(qū)別呢?下面腳本之家小編給大家介紹下用法及區(qū)別,需要的的朋友參考下
    2017-03-03
  • 一鍵配置CentOS iptables防火墻的Shell腳本分享

    一鍵配置CentOS iptables防火墻的Shell腳本分享

    這篇文章主要介紹了一鍵配置CentOS iptables防火墻Shell腳本分享,可保存到一個腳本文件中,在新安裝的CentOS系統(tǒng)時一條命令搞定iptables配置,需要的朋友可以參考下
    2014-07-07
  • shell處理用戶輸入傳遞參數(shù)的實現(xiàn)

    shell處理用戶輸入傳遞參數(shù)的實現(xiàn)

    本文主要介紹了shell處理用戶輸入傳遞參數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 局域網(wǎng)遠(yuǎn)程開機軟件制作代碼分享

    局域網(wǎng)遠(yuǎn)程開機軟件制作代碼分享

    局域網(wǎng)遠(yuǎn)程開機軟件制作代碼分享,大家可以參考使用,要網(wǎng)卡支持,需要gtk+2.0 的庫支持UI
    2013-12-12
  • shell腳本學(xué)習(xí)之調(diào)用腳本將文件打包zip的方法示例

    shell腳本學(xué)習(xí)之調(diào)用腳本將文件打包zip的方法示例

    這篇文章主要給大家介紹了關(guān)于shell腳本學(xué)習(xí)之調(diào)用腳本將文件打包zip的方法,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07

最新評論

南平市| 阿尔山市| 攀枝花市| 鄂温| 毕节市| 湖南省| 蓬莱市| 抚宁县| 屯留县| 兰考县| 莱芜市| 永德县| 邻水| 额尔古纳市| 新乐市| 定州市| 东平县| 广西| 环江| 云霄县| 荆门市| 盐池县| 德江县| 汉源县| 白银市| 永修县| 济阳县| 林口县| 塔河县| 延边| 庆阳市| 北碚区| 竹山县| 裕民县| 凭祥市| 定边县| 鹤壁市| 林甸县| 绍兴市| 会泽县| 中宁县|