Comment se connecter à un socket tcp avec powershell pour envoyer et recevoir des données?
J'ai écrit un petit script Powershell.
Il utilise .Net Système.IO.StreamReader et du Système.IO.StreamWriter pour lire et écrire des données depuis/vers le socket TCP.
Je tiens à vous connecter à une prise telnet style et envoyer/recevoir des commandes.
Je suis en train de lire les lignes avec les ReadLine() la méthode du Système.IO.StreamReader, mais les données à partir du serveur peut-être ne pas arriver à temps(?) ou IDK. Je ne suis pas à l'aide de commandes asynchrones. Merci de m'aider!
Voici mon script:
$FTPServer = "localhost"
$FTPPort = "21"
$tcpConnection = New-Object System.Net.Sockets.TcpClient($FTPServer, $FTPPort)
$tcpStream = $tcpConnection.GetStream()
$reader = New-Object System.IO.StreamReader($tcpStream)
$writer = New-Object System.IO.StreamWriter($tcpStream)
$writer.AutoFlush = $true
while ($tcpConnection.Connected)
{
while ($tcpStream.DataAvailable)
{
$reader.ReadLine()
}
if ($tcpConnection.Connected)
{
Write-Host -NoNewline "prompt> "
$command = Read-Host
if ($command -eq "escape")
{
break
}
$writer.WriteLine($command) | Out-Null
}
}
$reader.Close()
$writer.Close()
$tcpConnection.Close()
Et voici le résultat:
PS C:\Windows\System32\WindowsPowerShell\v1.0> test.ps1
220 Microsoft FTP Service
prompt> user username
331 Password required
prompt> pass password
230-Directory has 58,145,996,800 bytes of disk space available.
prompt>
230 User logged in.
500 Command not understood.
prompt> help
214-The following commands are recognized (* ==>'s unimplemented).
ABOR
ACCT
ADAT *
ALLO
APPE
AUTH
CCC
CDUP
CWD
DELE
ENC *
EPRT
EPSV
FEAT
HELP
HOST
LANG
LIST
MDTM
MIC *
MKD
MODE
NLST
NOOP
OPTS
PASS
PASV
PBSZ
PORT
PROT
PWD
QUIT
REIN
REST
RETR
RMD
RNFR
RNTO
SITE
prompt> escape
PS C:\Windows\System32\WindowsPowerShell\v1.0>
Il est un exemple ici. C'est la mise en œuvre de l'OI à l'aide de tampons. Je pense que dans votre code, vous manquez le TCP en entrée lors de l'attente pour l'entrée de l'utilisateur. Aussi cette une est mis en œuvre à l'aide de tampons.
OriginalL'auteur gazsiazasz | 2015-04-20
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser un tampon à lire dans la réponse. Le code devrait ressembler à ceci:
OriginalL'auteur Jan Chrbolka
La raison pour laquelle votre ligne de lecture se bloque est probablement parce que vous n'êtes pas la résiliation de la chaîne que vous envoyez avec '\n'.
Code Client:
Code serveur (nodejs)
juste werks.
OriginalL'auteur Evgeny Danilenko
J'ai trouvé que le NetworkStream DataAvailable de la propriété n'était pas assez sur son propre, et qu'il avait besoin d'un petit coup de pouce avant d'entrer dans la deuxième boucle while. Je l'ai testé et il fonctionne comme un charme lorsqu'il est connecté à un périphérique CISCO sur telnet.
OriginalL'auteur Chris Horan