Linux 测试端口(批量测试端口)畅通性
liuian 2024-12-14 13:33 52 浏览
在实际运维中,客户会经常要求协助测试某一地址和端口是否是联通状态,但有时客户反馈实际使用中有时是能访问通,有时访问不对,于是,按客户的要求,测试下来,发现:
telnet结果是通的,但客户反馈服务访问此地址时,很大概率还会出现超时的情况。基础部门建议循环telnet看下,是不是不稳定。
当时是手动多次重复执行telnet命令,发现确实有部分telnet不通的情况。
telnet 测试方法
telnet 192.168.1.9 443
批量telnet脚本
以下为通过脚本形式,实现批量telnet的方法:
192.168.1.9节点的tmp目录下新建过cheng文件夹。
循环telnet,shell脚本如下:
# ====================脚本开始============
PORT=XXXX
count=0
for i in $(cat ip_list.txt)
do
((count++))
echo "count=$count"
# 关键代码,1s自动结束telnet
(sleep 1;) | telnet $i $PORT >>telnet_result.txt
done
# 根据结果判断出正常可以ping通的ip
cat telnet_result.txt | grep -B 1 \] | grep [0-9] | awk '' | cut -d '.' -f 1,2,3,4 >telnet_alive.txt
# 差集,得到ping不同的ip
cat ip_list.txt telnet_alive.txt | sort | uniq -u >telnet_die.txt
# ====================脚本结束==================
执行步骤:
1、在Linux环境中运行,首先建文件夹如cheng(mkdir cheng),然后vim创建telnet.sh(vi telnet.sh)文件将上述代码复制进去,修改XXXX为实际端口号例如linux的远程端口22,保存退出。
2、在cheng文件夹中创建ip_list.txt(vim ip_list.txt)的文件,并输入要检查的服务器IP地址,每行一个地址。
3、执行telnet.sh(sh telnet.sh 或 bash telnet.sh)文件,等待结果。
4、cheng文件夹目录文件介绍
shell文件夹中会新出现3个新的文件,如下:
telnet_alive.txt#端口通的地址集合
telnet_die.txt#端口不通的地址集合
telnet_result.txt#所有地址检查结果
5、查看脚本执行结果,一般我们查看telnet_alive.txt文件即可。
脚本执行时,可能会报错:syntax error near unexpected token `
报销是因为我在windows7里写的shell脚本,传到CentOS系统里运行就可以会提示syntax error near unexpected token `错误,是因为两个系统的换行符不一样导致的。
需要使用notepad++转换下格式,转换方法
1、把脚本使用notepad++打开,点击“视图”->“显示符号”->显示所有字符,将所有字符显示出来,调整完成就会发现文档中出现CR LF,表示换行回车符
2、接下来,点击“编辑”->“档案格式转换”->“转换为UNIX格式”,目的是将windows的格式转为linux或unix格式
3、转换完成,换行回车符自动变成【LF】,这里再上传到服务上就可以了。
以上方式是固定端口。要telnet多个不同端口的话脚本需要修改一下,去掉上面脚本的Port部分,并改用while read line循环:
Shell脚本for和while的区别,for是按行读取,但如果行内文字有空格或tab等,则分开读取,即一次读取一个字符串。
如www.baidu.com 80,就会变成两行了,www.baidu.com一行, 80一行。telnet就会执行不下去。
While是整行读取,不管行内有多少段文字。
另外ip_list.txt需要改为ip + 端口
脚本如下:
count=0
cat ip_list.txt|while read line
do
((count++))
echo "count=$count"
echo "$line"
# 关键代码,1s自动结束telnet
(sleep 1;) | telnet $line >>telnet_result.txt
done
# 根据结果判断出正常可以ping通的ip
cat telnet_result.txt | grep -B 1 \] | grep [0-9] | awk '' | cut -d '.' -f 1,2,3,4 >telnet_alive.txt
# 差集,得到ping不同的ip
cat ip_list.txt telnet_alive.txt | sort | uniq -u >telnet_die.txt
但这个多端口的方式,生成的telnet_alive.txt始终为空,telnet_die.txt也有不对的情况出现(比如www.baidu.com 80实际是通的,却出现在telnet_die.txt里)。可能是ip_list.txt加了端口,相应的判断也需要改下。也可能是sleep 1时间不够长,前一个地址超时等待的时候,下一个地址又开始telnet,造成统计结果不准确。
其实从sh telnet.sh的执行结果上就能看出通不通了,下图报timed out的就是不通的。
使用nc命令判断端口情况
在Linux中有如下一条语句,也可以检验端口是否通
nc -zv origin-creation.com 443
没有nc的服务器,需要 yum install -y nc 安装一下。
这个命令不像telnet,需要手动退出才能执行下一个命令。可以使用此方法,手动多次重复执行,判断是否有不通的情况。
在Docker容器里也可以安装nc命令,安装命令:
apk add nc
安装之后可以在docker容器里,测试端口情况。
使用CURL命令判断端口情况
除telnet、nc之后,还可以通过curl来判断端口是否通,语句如下:
curl origin-creation.com:443 #注意地址和端口间的冒号“:”,一定不要落下
使用curl命令,相当于使用浏览器访问或使用postman等接口调用工具返回,返回只要不是timeout,基本均不通的状态,返回内容取决于端口返回内容
批量curl,循环curl脚本
在服务器任意位置创建文件,建议使用root用户,避免权限问题
vim forcurl
#!/bin/bash
for i in {1..1000}
do
echo '第一个IP: 192.168.1.9 8000端口,第' $i '次访问.........,'
time curl '192.168.1.9:8000'
echo '第二个IP: 10.11.12.100 8000端口,第' $i '次访问.........'
time curl '10.11.12.100:32767 '
echo '如果有多个ip,可以继续按照上边,继续写下去,脚本里不限制。。。。。'
echo '======用于区分次数============='
done
以上脚本是循环1000次,测试两个ip和端口的畅通性,每次均记录次数和访问结果,可自动调整次数,调整方法,将 for i in {1..1000}中的1000,换成对应次数即可。
脚本编写完成后,按esc键,再按“冒号wq”,保存退出。
使用以下命令执行并查看结果:
sh forcurl
以上即为Linux系统常见的检测端口畅通情况~
相关推荐
- 如何使用 Crontab 在 Linux 中安排 Cron 作业?
-
在Linux世界中,自动化运维和任务调度是提升效率的核心技能之一。而说到定时任务调度,「Cron」几乎是无人不知的标配工具。你可以用它按分钟、小时、天、周甚至月的粒度去执行脚本、备份、监控、同步...
- 迅雷发布下载MCP服务:一句话让AI自动找资源并下载
-
IT之家6月26日消息,迅雷今日发布下载MCP服务,号称“一句话即可让AI自动帮您下载”,该项服务同时支持PC版迅雷和NAS迅雷,现所有用户均可免费使用。目前迅雷MCP支持...
- Linux学习大总结(纯干货)-ubuntu的安装与Linux基础操作
-
一、Linux简介Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工...
- 连载嵌入式Linux开发教程:初始Ubuntu
-
2.5创建和配置虚拟机2.5.1创建虚拟机双击桌面的VMwarePlayer启动快捷方式打开VMwarePlayer软件,运行界面如图2.15所示。点击“创建新虚拟机(N)”,可以创建一台虚拟机...
- 解决ubuntu关机后自动重启的问题(ubuntu 关机没反应)
-
1.打开/etc/apt/sources.list,把里面的所有源删除,怕有风险的话先backup;2.然后进入软件与更新,重新选择源和serverthenapt-getupdate。注:我也不...
- Ubuntu 24.04设置自动登录(ubuntu设置root自动登陆)
-
在Ubuntu24.04中设置自动登录,可以通过修改GDM(GNOMEDisplayManager)的配置文件来实现。一、修改GDM配置文件1、打开终端:通过快捷键Ctrl+Alt+T打...
- docker-compose备份数据库,在crontab定时任务中不生效解决方法
-
问题:数据库为PostgreSQL。由于数据库是用docker-compose运行,所以直接用docker-compose命令直接备份。测试终端直接运行备份没问题,将命令添加到crontab定时任务...
- crontab定时任务执行时间与系统时间不一致解决方法
-
Ubuntucrontab定时任务执行时间与系统时间不一致(时区差)查看时间>#ll/etc/localtimelrwxrwxrwx1rootroot35Aug508:56...
- 如何在 Ubuntu 命令行中使用 Wireshark 进行抓包?
-
Wireshark是一个开源的网络协议分析工具,因其强大的抓包和分析功能而闻名。无论是调试网络问题、监控流量,还是进行安全审计,它都能派上用场。通常,我们会在带有图形界面的系统中,通过Wires...
- Ubuntu 操作系统常用命令详解(ubuntu简单的命令)
-
UbuntuLinux是一款流行的开源操作系统,广泛应用于服务器、开发、学习等场景。命令行是Ubuntu的灵魂,也是高效、稳定管理系统的利器。本文按照各大常用领域,详细总结Ubuntu必学...
- Linux系统如何设置开机自动运行脚本?
-
大家好,我是良许。在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务。在Windows下,我们有很多方法可以设置开机启动,但在Linux系统下我们需要如何操作呢?Linu...
- 【案例】Linux(Ubuntu)定时删除3天前文件夹
-
我公司有个OCR上传图片系统,每天会生成一个类似2025-05-10的文件夹,为了运维方便和硬盘空间的使用,我需要每天去删除之前的旧文件夹,比较麻烦。借助了Deepseek的帮助,将内容分享一下并给自...
- 解放你的双手,ubuntu定时自动备份MySQL数据库,亲测有效
-
1、新建一个文件夹存放备份的数据文件,根据个人需要放在合适的位置mkdir/home/cms_mysqlbackup2、创建脚本文件,我放在home文件夹了,命名为autobackup.shcd...
- Linux 如何每 5、10、15 或 30 分钟运行一次 Cron 作业?
-
在Linux系统中,Cron是一个强大的工具,用于自动化重复性任务。通过合理配置Cron,用户可以轻松实现每5分钟、10分钟、15分钟或30分钟运行一次的定时任务。本文将深入探讨如...
- 运维实战:深度拆解Systemd定时任务原理,90%的人不知道的玩法
-
运维实战:深度拆解Systemd定时任务原理,90%的人不知道的高效玩法一、Systemd定时任务的核心原理Systemd定时任务是Linux系统中替代传统cron的现代化解决方案,通过...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
python使用fitz模块提取pdf中的图片
-
- 最近发表
-
- 如何使用 Crontab 在 Linux 中安排 Cron 作业?
- 迅雷发布下载MCP服务:一句话让AI自动找资源并下载
- Linux学习大总结(纯干货)-ubuntu的安装与Linux基础操作
- 连载嵌入式Linux开发教程:初始Ubuntu
- 解决ubuntu关机后自动重启的问题(ubuntu 关机没反应)
- Ubuntu 24.04设置自动登录(ubuntu设置root自动登陆)
- docker-compose备份数据库,在crontab定时任务中不生效解决方法
- crontab定时任务执行时间与系统时间不一致解决方法
- 如何在 Ubuntu 命令行中使用 Wireshark 进行抓包?
- Ubuntu 操作系统常用命令详解(ubuntu简单的命令)
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)