AndyX:“你说啥玩?还有工具能直接Ping端口的?这么神奇的工具叫啥名字?” — 当一位微软工程师朋友给我安利tcping时我的反应
众所周知ping是个简单的测试网络连接情况的小工具,基于ICMP协议快速又有效非常实用;但它也有个缺点,就是不能指定端口,同时如果源地址禁止ICMP的话,ping命令就形同虚设了。
然而在实际环境中很多交换机或者云服务器等为了防止来自互联网的批量扫描器或者ICMP FLOOD攻击,大多时候对外都设置了禁止ICMP传输的防火墙规则。然而运维人员需要了解本地与服务器中特定服务的连接情况,这便成了一个头疼的问题了(当然设置监控服务器是很有效的选择,本文暂不讨论监控这个范围)。这里我们就需要用到一个冷门又好用的小工具就是tcping。
PS:当然某些情况下用telent\ssh\curl\netcat也可以,只是没有tcping这么简单易用。
若对监控感兴趣,可以参考本站中的教程:
展开索引
一、在不同系统版本下安装tcping
由于官网http://linuxco.de/tcping/已经关闭,这导致了所有原始链接均失效。所以现有下载链接请参见:
第三方备份地址(不含Linux源代码):
https://download.elifulkerson.com/files/tcping/0.39/
本站提供的备份地址(含有所有源代码以及可执行文件):
https://pan.baidu.com/s/1YA8u7vgRkUpC-SH5fDFtuQ 提取码:3iwq
请在下载后自行校对MD5或者SHA1文件指纹以验证文件完整性:
文件名称:tcping.exe
文件大小:258560 字节
MD5 :546549673BE62E980B19CF29AE7C2BE6
SHA1 :B0B05B54CC07CFD585C6BD9A16DF5B7238654063
文件名称:tcping64.exe
文件大小:296448 字节
MD5 :AC75D45CE01E0F10DD40B93E7C3931D5
SHA1 :0911B1F378F026E68632B41AB0CE2BD8C17BAD58
文件名称:tcping-0.36-src-for-win.zip
文件大小:53133 字节
MD5 :9F827F6AB78A9F5172340FA0C2695F29
SHA1 :DF19EDEBE8135D48E2E93AC0D16238B70B1D303F
文件名称:tcping-1.3.5-for-linux.tar.gz
文件大小:5889 字节
MD5 :F9DD03C730DB6999CA8BECA479F078E3
SHA1 :ECC5FE7FB2F8E86A1FC2D09651310B26FA922C7B
1.1 在windows环境下安装tcping
在以上的下载地中找到exe可执行文件,其中tcping.exe适用于32位Windows系统,tcping64.exe适用于64位Windows操作系统。
其实tcping是个绿色软件,就一个可执行文件,下载下来放在任意位置使用cmd控制台操作即可。
但是为了方便我个人建议可以尝试将其放入c:\windows\system32下,这样直接开启cmd控制台不需要指定tcping安装位置就能直接使用了,跟使用ping的效果基本是一样的。
1.2 在linux环境下进行源码安装
在本站提供的百度网盘备用下载地址中找到文件tcping-1.3.5-for-linux.tar.gz
准备安装环境,需要安装gcc:
# RHEL/CentOS5-6-7版本使用yum安装gcc与make yum -y install gcc make # RHEL8/CentOS8使用dnf安装gcc与make dnf -y install gcc make # Ubuntu/Debian使用apt安装gcc与make apt -y install gcc make
开始解压并编译tcping-1.3.5-for-linux.tar.gz
# 解压缩tcping-1.3.5源代码 tar -xf tcping-1.3.5-for-linux.tar.gz # 进入解压缩tcping-1.3.5的路径 cd tcping-1.3.5 # 开始编译tcping-1.3.5 make #反馈显示 gcc -o tcping -Wall -DHAVE_HSTRERROR tcping.c 编译结束 # 将编译好的tcping放置到/usr/local/bin/下 cp tcping /usr/local/bin/ # 然后在控制台直接打tcping即可使用,想要查看tcping使用方法可以参见 tcping --help
1.3 在linux环境下使用python-pip进行安装
这个步骤就非常简单了,无需手动下载任何文件。
准备安装环境,需要安装python-pip:
# RHEL/CentOS5-6-7使用yum安装Python-pip yum -y install python-pip # RHEL8/CentOS8使用dnf安装Python-pip dnf -y install python-pip # Ubuntu/Debian使用apt安装Python-pip apt -y install python-pip
# 使用Python-pip进一步安装 pip install tcping # 反馈 Successfully installed click-7.0 tcping-0.1.1rc1 安装完成
二、详细介绍tcping如何使用
在本地主机和远程主机之间,tcping可以测试出执行TCP三次握手所需的时间(SYN,SYN / ACK,ACK)。最终ACK传送时间不包括在内,只有最少的时间才能将其丢弃在近端。
由于tcping的Linux源代码年久失修,tcping目前仅在Windows模式下提供强大的功能支持,Linux模式下仅提供基本功能支持。
# Windows下使用 tcping [参数选项] [目标主机地址] [端口] # Linux下使用(参数较少) tcping [目标主机地址] -p [端口]
下面以Windows下的tcping为例,详解相关选项和参数:
选项 -4,优先使用IPv4 -6,优先使用IPv6 -h,使用http模式 -t,让命令持续运行,直到使用ctrl + c指令退出 -n 数字,发送命令的次数,默认4次 -i 数字,发送ping命令的时间间隔,默认1s,可以为小数 -w 数字,等待响应的时间间隔,默认2s,可以为小数 -d,使输出的每一行显示时间和日期 -f,强制ping命令至少发送一个比特(byte) -g 数字,失败指定次就放弃(注意默认是80端口,若其他端口没开也算失败) -b 数字,开启蜂鸣器,参数4会一直响铃 -c,只显示改变的信息(ping时间很短一般不会改变) -r 数字,每发送指定个数据包,就重新查找主机一次(通过DNS或路由查找) -s,ping通就立即退出 -u,与-h命令连用,每一行输出目标的url -v,显示版本信息 -j,使用默认的方法,求ping的均值减小波动,网络有一定的不稳定性时,用此参数可以减小波动 -js 数字,用指定个实例求平均值减小波动,使用这个参数,系统会tcping 指定次,然后求出平均值作为一次结果显示,减小波动 –tee file_path,将结果输出到指定位置,tcping –tee /data/test.txt192.168.0.100,会把ping的结果保存在/data下的test文件中 –file,从文件中获得ping的来源;在/data下新建一个test.txt文件,并输入要tcping的所有ip或域名,一行一个,然后执行命令tcping –file /data/test.txt,就会依次tcping文件中指定的地址 destination,可以是DNS地址、IP地址、URL(需要使用-h,http模式)。使用http模式时,不要加https//或:port,例如:tcping http://www.elifulkerson.com:8080/index.html就会失败,使用tcping www.elifulkerson.com/index.html 8080就会成功 port 数字,指定tcp端口(1-65535),如果不指定,默认是80 –header,在头部显示时间和日期,与–tee显示的格式差不多 –block,tcping不通的等待时间,默认是20秒(很长)。–block可以把-w参数冲突掉 ,例如tcping --block www.baiu.com网址不正确,显然tcpping不通,默认会等待20s 。 tcping -w 0.5 –block www.baiu.com还是会等20s,而不是0.5s,因为–block选项会把-w选项冲突掉。 HTTP模式选项 –post,在http模式中,使用post方法 –head,在http模式中,使用head方法 –get Shorthand to invoke “http” mode for consistency’s sake. –proxy-server,指定代理服务 –proxy-port,指定代理服务端口 –proxy-credentials username:password,使用代理的安全验证,需要输入用户名和密码 返回值 如果所有的pings是成功的,返回0;如果所有ping都失败,返回1;混合结果,返回2
tcping在Windows下使用的实例
tcping -d -h -u -n 10 -i 0.1 -w 0.1 andyx.net 80 # 以上命令参数解释为: #使用http模式(-h) #在返回数据中显示目标源url地址(-u) #向主机名为andyx.net的80端口发送10次数据包(-n 10) #在返回数据行中显示发送数据包的日期(-d) #指定每次发送数据包的时间间隔为0.1秒(-i 0.1) #等待数据包相应的时间间隔为0.1秒(-w 0.1)
tcping在Linux下使用的实例
tcping -t 20 -c 7 andyx.net -p 80 # 以上命令参数解释为: -p : 指定端口80 -t : 限定超时时间,以秒为单位 20秒 -c : 探测多少次后结束 7次
三、在Linux系统下tcping的进阶使用方法
在一些故障排查场景中,可能需要使用tcping对特定的个端口进行持续的监测,并且给需要记录详细的时间戳。因此我们可以使用logger命令配合使用tcping工具并将详细的状况记录在syslog/message日志中以便进一步分析。以下为详细的操作示例(Ubuntu 20测试环境)。
命令如下:
tcping -c 86400 microsoft.com -p 443 | logger -t tcping & ##解释: -c, --count INTEGER Try connections counts 测试的计数,通常每秒一个 86400 = 24Hours 将计数设置为86400,即为监测1天(可适当根据场景调整)
可运行以下命令查询syslog/message并持续监测:
tail -f /var/log/syslog
效果如下图所示:
可运行以下命令终止监测:
killall tcping
(END)
若需转载本文,请标注来源与链接:原创内容AndyX.Net版权所有 https://andyx.net/tcping_is_a_super-easy_tool_for_direct_port/
tcping选项部分参考了“yjk13703623757的博客”:https://blog.csdn.net/yjk13703623757/article/details/80370403
本文部分内容已经上传至百度经验:https://jingyan.baidu.com/article/bad08e1e55f25049c9512138.html