当前位置: 首页 > article >正文

powershell 接收一个端口tcp数据复制转发到多个目的

在 PowerShell 中,你可以使用 New-Object 来创建 System.Net.Sockets.TcpListener 和 System.Net.Sockets.TcpClient 对象,从而接收一个 TCP 端口的数据并将其转发到多个目的地。下面是一个 PowerShell 脚本示例,该脚本展示了如何从一个 TCP 端口接收数据并将其复制到多个目标地址:

 
# 定义源端口和目标地址
$sourcePort = 12345
$destinations = @(
@{ Ip = '目标IP地址1'; Port = '目标端口1' },
@{ Ip = '目标IP地址2'; Port = '目标端口2' },
@{ Ip = '目标IP地址3'; Port = '目标端口3' }
)

# 创建 TcpListener 来监听源端口
$tcpListener = New-Object System.Net.Sockets.TcpListener((New-Object System.Net.IPEndPoint([System.Net.IPAddress]::Any, $sourcePort))
$tcpListener.Start()

# 循环监听连接
while ($true) {
# 接受客户端连接
$tcpClient = $tcpListener.AcceptTcpClient()
$clientStream = $tcpClient.GetStream()

# 为每个目标启动一个新的后台任务进行转发
foreach ($destination in $destinations) {
Start-Job -ScriptBlock {
# 创建 TcpClient 连接到目标地址
$remoteTcpClient = New-Object System.Net.Sockets.TcpClient($args[0].Ip, $args[0].Port)
$remoteStream = $remoteTcpClient.GetStream()

# 读取源数据流并写入目标数据流
while ($true) {
if ($clientStream.DataAvailable) {
$buffer = New-Object Byte[] 1024
$bytesRead = $clientStream.Read($buffer, 0, $buffer.Length)
if ($bytesRead -eq 0) {
break
}
$remoteStream.Write($buffer, 0, $bytesRead)
$remoteStream.Flush()
} else {
Start-Sleep -Milliseconds 100
}
}

# 关闭连接
$remoteStream.Close()
$remoteTcpClient.Close()
} -ArgumentList $destination
}

# 关闭客户端连接
$clientStream.Close()
$tcpClient.Close()
}

# 注意:上述脚本会无限循环,接受新的连接。在实际使用中,你可能需要添加适当的退出条件。

在这个脚本中,我们首先定义了一个源端口和多个目标地址。然后,我们创建一个 TcpListener 来监听源端口。当一个新的连接被接受时,我们为每个目标地址启动一个新的后台任务(使用 Start-Job)。每个后台任务都会创建一个新的 TcpClient 来连接到目标地址,并从一个流中读取数据然后写入到另一个流中。

请注意,这个脚本将无限循环并接受新的连接,因此在实际使用中,你可能需要添加适当的退出条件,例如监听特定的关闭命令或处理异常来优雅地关闭脚本。

此外,由于这个脚本使用了多个后台任务,因此它会在后台同时处理多个连接。请确保你的系统有足够的资源来处理这些并发连接。

在运行此脚本之前,请确保你有足够的权限来绑定到指定的端口,并且防火墙设置允许这些连接。


http://www.kler.cn/a/231130.html

相关文章:

  • Linux介绍和命令使用
  • 分布式任务调度框架XXL-JOB详解
  • Mac OS中创建适合网络备份的加密镜像文件:详细步骤与参数选择
  • 2023蓝桥杯python大学A组部分题目详细解析
  • qt在pro文件中设置utf-8编码
  • Elasticsearch:使用 LangChain 文档拆分器进行文档分块
  • 【网络技术】【Kali Linux】Nmap 嗅探(一)简单扫描
  • 蓝桥杯Web应用开发-CSS3 新特性【练习二:获得焦点验证】
  • 【数据结构】链表OJ面试题5(题库+解析)
  • 【教程】Linux使用git自动备份和使用支持文件恢复的rm命令
  • 【Android-Compose】Material3 新版下拉刷新 PullRefresh
  • CoreSight学习笔记
  • 开源软件:技术创新与应用的推动力量
  • redis特点
  • 【PyTorch][chapter 15][李宏毅深度学习][Neighbor Embedding-LLE]
  • 博客|基于Springboot的个人博客系统设计与实现(源码+数据库+文档)
  • docker 容器指定主机网段
  • python-产品篇-游戏-象棋
  • EV1527协议应用
  • 国图公考:公务员面试资格复审需要准备什么?