web-dev-qa-db-ja.com

Windowsのソケットにテキスト文字列を送信する

アクションを実行するために特定のテキスト文字列をリッスンするオープンソケットを持つサーバーがあります。

私たちのLinuxマシンは、このデータを次の方法で送信します。

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

これはWindowsで可能ですか(おそらくPowerShellまたは他の組み込みユーティリティで)?もしそうなら、どのように?

1
rainereality

これがあなたのための小さな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エンコーディングを使用するため、狭い文字を使用する他の多くのシステムとは対照的に、文字は通常「広い」ということも考慮する価値があります。したがって、文字列をASCIIなどではなくUnicodeとしてエンコードすることをお勧めします。使用目的によって異なります。

または、Netcatの例のように単純にしたい場合は、Netcat forWindowsをダウンロードしてください。

5
Ryan Ries

PuTTY を使用できます。これには、raw接続オプションを選択します。 Telnetもあなたのために働くかもしれません

telnetサーバーポート

4
HamishC