草庐IT

分享我炼制的脚本神器,powershell版《tcp-ping》

PowerShell免费软件 2023-04-09 原文


script 脚本 powershell tcp ping ipv6

powershell 传教士 原创文章。始于 2023-04-03 允许转载,但必须保留名字和出处

---【前言】---

我写了个powershell脚本 tcp--ping-v3.ps1。它支持在linux下ping ipv6地址。
但最近接到反馈,说不支持。实际上是帮助信息不好,所以我做了更改,完善了。就写了此贴。


先一键安装linux版powershell
https://gitee.com/chuanjiao10/kasini3000_agent_linux


下载地址:
https://gitee.com/chuanjiao10/kasini3000/blob/master/tcp--ping-v5.ps1

脚本功能说明:
先把域名解析成ip,或把k8s的service名解析成pod的ip,然后挨个tcp连接。并用 绿色 表示通了。红色表示不通。


在linux下,tcping,ipv6端口用法:(用法改了)
./tcp--ping-v5.ps1 ip 端口 -AdapterNameLinux 'eth0'


建议搭配此脚本使用:fh返回网卡名_mac_ip_linux.ps1

 

 


-AdapterNameLinux 'eth0' 是v5版脚本新增参数。在linux下不用ipv6,不需要此参数。


---【正文:凭什么你炼制的是神器?凭什么你这脚本世界第一?】---

1本脚本是【多线程】级别:
支持多线程并发例子:

$csv = import-csv -path 'd:\file.csv'
$csv | foreach-object -Parallel {
    /xxx/tcp--ping-v5.ps1 -MyComputerName $_.'域名或ip' -port $_.'端口'
}

 

【多进程】级别的坏处很明显,不适太合批量,你tcping一千个端口,就要fork一千次进程。说白了就是占cpu,内存多。
golang做不到;任何二进制程序做不到;py的话分2中情况:如果你从shell命令行调用,每次一个ip,那就是python -f x.py,这也是多进程级的。

 

2脚本是明文的:尽量用开源的二进制程序,减少被藏-毒的风险。
golang做不到;任何二进制程序做不到;

 

3脚本跨平台。1个脚本文件,win,linux通用。
golang做不到;任何二进制程序做不到;py可以。

 

4本脚本解析dns,是k8s的绝佳伴侣:
一遍遍地tcp--ping.ps1,就可以测试k8s集群中,
1 测试k8s cluster 域名解析是否正常,是否少解析出了几个pod ip。
2 解析10遍k8s cluster域名,测试是否有几遍,解析过程会卡住。
3 测试每个k8s pod的【某端口】是否全通。

为啥必须得用:
1 先把域名解析成ip,然后挨个tcp连接。(如图所示)linux的tcping无此功能。顾此特色世界唯一!

 


2 当你使用iptable作为k8s的虚拟路由器时,不能使用ping来测试集群是否通。因为iptable不转发icmp。

 

---【后记】---


问:为什么不用linux的tcping?
答:tcping除了不解析ip外,还不支持ipv6


“linux的tcping还有这等限制,我也算读过不少上古典籍,怎么没听说过此事?”二愣子韩立眉头皱起说道。

“韩兄以为我想用powershell版吗?这也是被逼无奈之事。大部分linux古书上只是记载了tcping的神妙,但是却很少有修士记录它的缺陷。
我辈修士一用才发现,并不显示解析的ip,还不支持ipv6。韩兄,不信你试试” 紫灵苦笑一声无奈的说道。


-炼制神器,必须有精益求精的精神。谢谢观看完-

 

有关分享我炼制的脚本神器,powershell版《tcp-ping》的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

  4. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  5. ruby - 确定 ruby​​ 脚本是否已经在运行 - 2

    有没有一种简单的方法可以判断ruby​​脚本是否已经在运行,然后适本地处理它?例如:我有一个名为really_long_script.rb的脚本。我让它每5分钟运行一次。当它运行时,我想看看之前运行的是否还在运行,然后停止第二个脚本的执行。有什么想法吗? 最佳答案 ps是一种非常糟糕的方法,并且可能会出现竞争条件。传统的Unix/Linux方法是将PID写入文件(通常在/var/run中)并在启动时检查该文件是否存在。例如pid文件位于/var/run/myscript.pid然后你会在运行程序之前检查它是否存在。有一些技巧可以避免

  6. ruby - ruby 脚本可以预编译成二进制文件吗? - 2

    我正在开发一个Ruby脚本,需要在没有Ruby解释器的情况下部署到系统上。它将需要在使用ELF格式的FreeBSD系统上运行。我知道有一个ruby​​2exe项目可以编译在Windows上运行的ruby​​脚本,但是在其他操作系统上这样做容易吗?甚至可能吗? 最佳答案 您是否检查过Rubinius或JRuby是否允许您预编译您的代码? 关于ruby-ruby脚本可以预编译成二进制文件吗?,我们在StackOverflow上找到一个类似的问题: https://

  7. ruby-on-rails - Ruby 从 bash 脚本执行中捕获 stderr 输出 - 2

    我目前可以将stdout重定向到ruby​​/rails中的字符串变量,只需在bash中运行命令并将结果设置为我的字符串变量,如下所示。val=%x[#{cmd}]其中cmd是表示bash命令的字符串。但是,这仅捕获stdout,因为我想捕获stderr并将其设置为ruby​​中的字符串——有什么想法吗? 最佳答案 简单地重定向它:val=%x[#{cmd}2>&1]如果您只想从stderr捕获输出,请在将其复制到fd2后关闭stdout的文件描述符。val=%x[#{cmd}2>&1>/dev/null]

  8. ruby - 是否可以从 ruby​​ 脚本返回值并在 c 或 shell 脚本中读取该值? - 2

    我们如何从ruby​​脚本返回值?#!/usr/bin/envrubya="test"a我们如何在Ubuntu终端或java或c中访问'a'的值? 最佳答案 在ruby​​/python脚本中打印你的变量,然后可以通过示例从shell脚本中读取它:#!/bin/bashruby_var=$(rubymyrubyscript.rb)python_var=$(pythonmypythonscript.py)echo"$ruby_var"echo"$python_var"注意你的ruby​​/python脚本只打印这个变量(有更多复杂的方

  9. ruby - 从 FaSTLane 将环境变量传递给 shell 脚本 - 2

    我在跑Fastlane(适用于iOS的持续构建工具)以执行用于解密文件的自定义shell脚本。这是命令。sh"./decrypt.shENV['ENCRYPTION_P12']"我想不出将环境变量传递给该脚本的方法。显然,如果我将密码硬编码到脚本中,它就可以正常工作。sh"./decrypt.shmypwd"有什么建议吗? 最佳答案 从直接Shell中扩展假设这里的sh是一个faSTLane命令,它以给定的参数作为脚本文本调用shell命令:#asafastlanedirectivesh'./decrypt.sh"$ENCRYPTI

  10. ruby - 从 ruby​​ 调用时返回 shell 脚本的状态值? - 2

    我希望这些值匹配。当shell脚本由于某些错误条件而退出时(因此返回非零值),它们不匹配。壳$?返回1,ruby$?返回256。>>%x[lskkr]ls:kkr:Nosuchfileordirectory=>"">>puts$?256=>nil>>exitHadoop:~Madcap$lskkrls:kkr:NosuchfileordirectoryHadoop:~Madcap$echo$?1 最佳答案 在Ruby中$?是一个Process::Status实例。打印$?等同于调用$?.to_s,这等同于$?.to_i.to_s(来

随机推荐