只能通过TCP接收或发送数据

4
我在编写PowerShell脚本时遇到了问题,需要通过TCP连接发送和接收数据。但似乎只能执行其中之一。以下是我目前编写的内容。我想监听并等待连接,一旦建立连接,就会接收一个包含IP地址的字符串,并进行一些高级查找以查看登录到该计算机的用户,然后发送回用户名。如果仅发送数据,则可以正常工作。如果仅接收数据,则也可以正常工作。如果尝试同时执行两者,则仅接收部分有效。我做错了什么?
$port = 1234

do {
  $user = ""

  $endpoint = new-object System.Net.IPEndPoint ([system.net.ipaddress]::any, $port)
  $listener = new-object System.Net.Sockets.TcpListener $endpoint
  $listener.start()

  $client = $listener.AcceptTcpClient() # will block here until connection
  $stream = $client.GetStream();

  $reader = New-Object System.IO.StreamReader $stream
  $writer = New-Object System.IO.StreamWriter $stream

  $add = $reader.ReadLine()
  #$reader.close()

  write-host "Request from " $add

  if($add) {
    $user = & wmic /Node:$add ComputerSystem Get UserName
    write-host "User returned is " $user[2]
  }

  if($user[2] -eq "ERROR:") {
    $user[2] = "ErrNoUserW"
  } elseif(!$user[2]) {
    $user[2] = "ErrServerW"
  }

  $writer.Write($user[2])

  #$writer.close()
  $stream.close()
  $client.close()
  $listener.stop()
} while(1)

你能发布客户端脚本吗? - user4003407
目前我正在使用Nmap套件中的Ncat进行测试。因此,如果您执行“/path/to/ncat ip_address port_number”,然后输入IP并按Enter键,它将响应用户名(或者,这是想法。客户端从未看到响应)。 - mbarnes4096
4
尝试 $writer.Flush() - user4003407
太棒了!谢谢。就是这样! - mbarnes4096
1
顺便提一下,在 PowerShell 脚本中不要使用 wmic。请改用 Get-WmiObject$user = (Get-WmiObject -Computer $add -Class Win32_ComputerSystem).UserName - Ansgar Wiechers
1个回答

0

我认为在任何给定的时间,流只能被读取或写入。你试过关闭流然后重新打开吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接