在Linux中编写shell脚本监听指定端口的实现方式
在Linux中你可以编写一个shell脚本来监听指定端口。以下是几种实现方式方法1使用ncnetcat的简单监听脚本1234567891011121314151617181920212223#!/bin/bash# 文件名port_listener.sh# 检查参数if[ $# -ne 1 ]; thenecho使用方法: $0 端口号echo示例: $0 8080exit1fiPORT$1echo正在监听端口 $PORT ...echo按 CtrlC 停止监听# 使用netcat监听端口nc -l -p $PORT# 如果上面的命令失败尝试不带-p参数的格式if[ $? -ne0 ];thenecho尝试另一种nc语法...nc -l $PORTfi方法2使用socat功能更强大1234567891011121314#!/bin/bash# 文件名port_listener_socat.shif[ $# -ne 1 ]; thenecho使用方法: $0 端口号exit1fiPORT$1echo使用socat监听端口 $PORTecho输入将会显示在终端输出将会发送回客户端socat TCP-LISTEN:$PORT,fork EXEC:/bin/cat方法3使用Python的增强版脚本推荐12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#!/bin/bash# 文件名port_listener_advanced.sh# 颜色定义RED\033[0;31mGREEN\033[0;32mYELLOW\033[1;33mNC\033[0m# No Color# 检查参数if[ $# -lt 1 ] || [ $# -gt 2 ]; thenecho-e${GREEN}使用方法:${NC}echo $0 端口号 [协议]echo 端口号: 要监听的端口echo [协议]: 可选tcp 或 udp默认为 tcpechoecho-e${YELLOW}示例:${NC}echo $0 8080 # 监听TCP端口8080echo $0 8080 tcp # 监听TCP端口8080echo $0 53 udp # 监听UDP端口53exit1fiPORT$1PROTOCOL${2:-tcp}# 默认为TCP# 检查端口是否有效if! [[$PORT~ ^[0-9]$ ]] || [$PORT-lt 1 ] || [$PORT-gt 65535 ];thenecho-e${RED}错误: 端口号必须在1-65535之间${NC}exit1fi# 检查协议是否有效if[[$PROTOCOL!tcp$PROTOCOL!udp]];thenecho-e${RED}错误: 协议必须是 tcp 或 udp${NC}exit1fi# 检查端口是否已被占用echo-e${YELLOW}检查端口 $PORT 是否可用...${NC}ifss -tuln |grep-q:$PORT ;thenecho-e${RED}错误: 端口 $PORT 已被占用${NC}ss -tuln |grep:$PORT exit1fiecho-e${GREEN}${NC}echo-e${GREEN}开始监听${NC}echo-e端口: ${YELLOW}$PORT${NC}echo-e协议: ${YELLOW}$PROTOCOL${NC}echo-e时间: $(date)echo-e主机: $(hostname)echo-eIP地址: $(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}按 CtrlC 停止监听${NC}echo# 根据协议选择监听方式if[[$PROTOCOLtcp]];then# TCP监听echo等待TCP连接...nc -l -p $PORT -velse# UDP监听echo等待UDP数据包...echo注意: UDP是无连接的可能需要使用特定工具发送数据nc -u -l $PORT -vfi# 监听结束时显示信息echoecho-e${GREEN}监听已停止${NC}echo-e结束时间: $(date)方法4使用多个工具备选的脚本12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#!/bin/bash# 文件名port_listener_universal.shPORT$1# 检查工具是否可用check_command() {command-v$1 /dev/null21}echo尝试监听端口 $PORT# 按优先级尝试不同的工具ifcheck_command nc;thenecho使用 netcat (nc) 监听...nc -l $PORTelifcheck_command socat;thenecho使用 socat 监听...socat TCP-LISTEN:$PORT,fork EXEC:/bin/catelifcheck_command python3;thenecho使用 Python3 监听...python3 -c importsocketimportsysport $PORTsock socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)sock.bind((, port))sock.listen(1)print(fPython监听端口 {port}...)print(等待连接...)whileTrue:conn, addr sock.accept()print(f连接来自: {addr})try:whileTrue:data conn.recv(1024)ifnot data:breakprint(f收到: {data.decode()})conn.sendall(data)# 回声except KeyboardInterrupt:print(\\n停止监听)breakfinally:conn.close()sock.close()elseecho错误: 没有找到可用的监听工具echo请安装以下任一工具:echo 1. netcat (nc)echo 2. socatecho 3. python3exit1fi使用方法保存脚本12nano port_listener.sh# 复制粘贴上面的脚本内容添加执行权限1chmodx port_listener.sh运行脚本123456789# 简单监听./port_listener.sh 8080# 高级版支持TCP/UDP./port_listener_advanced.sh 8080./port_listener_advanced.sh 53 udp# 通用版自动选择可用工具./port_listener_universal.sh 8080测试连接在另一个终端测试连接12345678# 使用telnet测试TCPtelnet localhost 8080# 使用nc测试TCPechoHello| nc localhost 8080# 使用nc测试UDPechoHello UDP| nc -u localhost 53安装必要工具如果缺失12345678# Ubuntu/Debiansudoapt updatesudoaptinstallnetcat socat python3# CentOS/RHEL/Fedorasudoyuminstallnc socat python3# 或sudodnfinstallnc socat python3到此这篇关于在Linux中编写shell脚本监听指定端口的实现方式的文章就介绍到这了
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477605.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!