在实际运维中,客户会经常要求协助测试某一地址和端口是否是联通状态,但有时客户反馈实际使用中有时是能访问通,有时访问不对,于是,按客户的要求,测试下来,发现: telnet结果是通的,但客户反馈服务访问此地址时,很大概率还会出现超时的情况。基础部门建议循环telnet看下,是不是不稳定。 当时是手动多次重复执行telnet命令,发现确实有部分telnet不通的情况。telnet测试方法telnet192。168。1。9443批量telnet脚本 以下为通过脚本形式,实现批量telnet的方法: 192。168。1。9节点的tmp目录下新建过cheng文件夹。 循环telnet,shell脚本如下:脚本开始PORTXXXXcount0foriin(catiplist。txt)do((count))echocountcount关键代码,1s自动结束telnet(sleep1;)telnetiPORTtelnetresult。txtdone根据结果判断出正常可以ping通的ipcattelnetresult。txtgrepB1〕grep〔09〕awkcutd。f1,2,3,4telnetalive。txt差集,得到ping不同的ipcatiplist。txttelnetalive。txtsortuniqutelnetdie。txt脚本结束 执行步骤: 1、在Linux环境中运行,首先建文件夹如cheng(mkdircheng),然后vim创建telnet。sh(vitelnet。sh)文件将上述代码复制进去,修改XXXX为实际端口号例如linux的远程端口22,保存退出。 2、在cheng文件夹中创建iplist。txt(vimiplist。txt)的文件,并输入要检查的服务器IP地址,每行一个地址。 3、执行telnet。sh(shtelnet。sh或bashtelnet。sh)文件,等待结果。 4、cheng文件夹目录文件介绍 shell文件夹中会新出现3个新的文件,如下: telnetalive。txt端口通的地址集合 telnetdie。txt端口不通的地址集合 telnetresult。txt所有地址检查结果 5、查看脚本执行结果,一般我们查看telnetalive。txt文件即可。 脚本执行时,可能会报错:syntaxerrornearunexpectedtoken 报销是因为我在windows7里写的shell脚本,传到CentOS系统里运行就可以会提示syntaxerrornearunexpectedtoken错误,是因为两个系统的换行符不一样导致的。 需要使用notepad转换下格式,转换方法 1、把脚本使用notepad打开,点击视图显示符号显示所有字符,将所有字符显示出来,调整完成就会发现文档中出现CRLF,表示换行回车符 2、接下来,点击编辑档案格式转换转换为UNIX格式,目的是将windows的格式转为linux或unix格式 3、转换完成,换行回车符自动变成【LF】,这里再上传到服务上就可以了。 以上方式是固定端口。要telnet多个不同端口的话脚本需要修改一下,去掉上面脚本的Port部分,并改用whilereadline循环: Shell脚本for和while的区别,for是按行读取,但如果行内文字有空格或tab等,则分开读取,即一次读取一个字符串。 如www。baidu。com80,就会变成两行了,www。baidu。com一行,80一行。telnet就会执行不下去。 While是整行读取,不管行内有多少段文字。 另外iplist。txt需要改为ip端口 脚本如下:count0catiplist。txtwhilereadlinedo((count))echocountcountecholine关键代码,1s自动结束telnet(sleep1;)telnetlinetelnetresult。txtdone根据结果判断出正常可以ping通的ipcattelnetresult。txtgrepB1〕grep〔09〕awkcutd。f1,2,3,4telnetalive。txt差集,得到ping不同的ipcatiplist。txttelnetalive。txtsortuniqutelnetdie。txt 但这个多端口的方式,生成的telnetalive。txt始终为空,telnetdie。txt也有不对的情况出现(比如www。baidu。com80实际是通的,却出现在telnetdie。txt里)。可能是iplist。txt加了端口,相应的判断也需要改下。也可能是sleep1时间不够长,前一个地址超时等待的时候,下一个地址又开始telnet,造成统计结果不准确。 其实从shtelnet。sh的执行结果上就能看出通不通了,下图报timedout的就是不通的。 使用nc命令判断端口情况 在Linux中有如下一条语句,也可以检验端口是否通nczvorigincreation。com443 没有nc的服务器,需要yuminstallync安装一下。 这个命令不像telnet,需要手动退出才能执行下一个命令。可以使用此方法,手动多次重复执行,判断是否有不通的情况。 在Docker容器里也可以安装nc命令,安装命令:apkaddnc 安装之后可以在docker容器里,测试端口情况。使用CURL命令判断端口情况 除telnet、nc之后,还可以通过curl来判断端口是否通,语句如下:curlorigincreation。com:443注意地址和端口间的冒号:,一定不要落下 使用curl命令,相当于使用浏览器访问或使用postman等接口调用工具返回,返回只要不是timeout,基本均不通的状态,返回内容取决于端口返回内容 批量curl,循环curl脚本 在服务器任意位置创建文件,建议使用root用户,避免权限问题vimforcurl!binbashforiin{1。。1000}doecho第一个IP:192。168。1。98000端口,第i次访问。。。。。。。。。,timecurl192。168。1。9:8000echo第二个IP:10。11。12。1008000端口,第i次访问。。。。。。。。。timecurl10。11。12。100:32767echo如果有多个ip,可以继续按照上边,继续写下去,脚本里不限制echo用于区分次数done 以上脚本是循环1000次,测试两个ip和端口的畅通性,每次均记录次数和访问结果,可自动调整次数,调整方法,将foriin{1。。1000}中的1000,换成对应次数即可。 脚本编写完成后,按esc键,再按冒号wq,保存退出。 使用以下命令执行并查看结果:shforcurl 以上即为Linux系统常见的检测端口畅通情况