在 Windows 中将文本字符串发送到套接字

在 Windows 中将文本字符串发送到套接字

我有一台服务器,它有一个开放的套接字,可以监听其上的特定文本字符串以执行操作。

我们的 Linux 机器通过以下方式发送这些数据:

echo "text_string" | nc -w 2 server-name port#

这在 Windows 上可行吗(可能是在 powershell 或其他内置实用程序中)?如果可以,怎么做?

答案1

这是给你的一个小 Powershell...应该与任何版本的 PS 兼容...可能是 PSv2 或更高版本。适用于主机名或 IP 地址。

Function Send-StringOverTcp ( 
    [Parameter(Mandatory=$True)][String]$DataToSend,
    [Parameter(Mandatory=$True)][String]$Hostname, 
    [Parameter(Mandatory=$True)][UInt16]$Port)
{
    Try
    {
        $ErrorActionPreference = "Stop"
        $TCPClient  = New-Object Net.Sockets.TcpClient
        $IPEndpoint = New-Object Net.IPEndPoint($([Net.Dns]::GetHostEntry($Hostname)).AddressList[0], $Port)
        $TCPClient.Connect($IPEndpoint)
        $NetStream  = $TCPClient.GetStream()
        [Byte[]]$Buffer = [Text.Encoding]::ASCII.GetBytes($DataToSend)
        $NetStream.Write($Buffer, 0, $Buffer.Length)
        $NetStream.Flush()
    }
    Finally
    {
        If ($NetStream) { $NetStream.Dispose() }
        If ($TCPClient) { $TCPClient.Dispose() }
    }
}

    Send-StringOverTcp -DataToSend 'foo!' -Hostname google.com -Port 80

我写这篇文章非常匆忙……您可能想在其中添加额外的参数验证和错误捕获,但您明白我的意思。同样值得考虑的是,Windows 默认使用 UTF16 LE 编码,因此字符通常是“宽的”,而许多其他系统则使用窄字符。因此,您可能希望将字符串编码为 Unicode 而不是 ASCII 等。取决于您使用它的目的。

或者,如果您希望使它像 Netcat 示例一样简单,只需...下载适用于 Windows 的 Netcat。

答案2

您可以使用油灰为此,请选择原始连接选项。Telnet 也可能适合您

telnet 服务器端口

相关内容