Windows

將文本字元串發送到 Windows 中的套接字

  • April 6, 2017

我有一個伺服器,它有一個打開的套接字,它監聽它上面的特定文本字元串以執行操作。

我們的 linux 機器通過以下方式發送這些數據:

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

這在 Windows 上是否可行(可能在 powershell 或其他內置實用程序中)?如果是這樣,怎麼做?

這是給你的一個小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。

引用自:https://serverfault.com/questions/629682