【发布时间】:2015-10-07 14:17:02
【问题描述】:
我在编写可以通过 TCP 连接发送和接收数据的 PowerShell 脚本时遇到问题。它似乎只让我做一个或另一个。
以下是我目前所拥有的。我想听并等待连接,然后一旦建立,接收一个包含 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)
【问题讨论】:
-
您可以将客户端脚本发布到吗?
-
现在我正在使用 Ncat(来自 Nmap 套件)进行测试。因此,如果您执行“/path/to/ncat ip_address port_number”,然后只需输入一个 IP 并按 Enter,它将以用户名响应(或者,无论如何,这就是想法。客户端永远不会看到响应)。
-
尝试
$writer.Flush()。 -
太棒了!谢谢你。就是这样!
-
附带说明,不要在 PowerShell 脚本中使用
wmic。改用Get-WmiObject:$user = (Get-WmiObject -Computer $add -Class Win32_ComputerSystem).UserName
标签: sockets powershell tcp