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

rai*_*ity 1 networking windows tcp netcat socket

我有一个服务器,它有一个打开的套接字,用于侦听特定的文本字符串以执行操作。

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

echo "text_string" | nc -w 2 server-name port#
Run Code Online (Sandbox Code Playgroud)

这在 Windows 上是否可行(可能在 powershell 或其他内置实用程序中)?如果是这样,如何?

Rya*_*ies 5

这是给你的一个小 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
Run Code Online (Sandbox Code Playgroud)

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

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