On Machine A
I am running a port scanner. On Machine B
I would like to open and close ports in an organized fashion. I am hoping to do all of this via powershell.
I found THIS script to run on Machine B
however when scanning the same port from Machine A
it still says that it is closed.
Do any of you know how I can successfully open a port on Machine B
Tutorial Firewall - Open a TCP port using Powershell As an Administrator, start an elevated Powershell command-line. Create a firewall rule to open a TCP port using Powershell. Verify the created firewall rule. In our example, we created a firewall rule to allow the input on the TCP port 80 using Powershell.
Answer: Open the Run command and type cmd to open the command prompt. Type: “netstat –na” and hit enter. Find port 445 under the Local Address and check the State. If it says Listening, your port is open.
Avoid COM if possible. You can use TcpListener to open a port:
$Listener = [System.Net.Sockets.TcpListener]9999;
$Listener.Start();
#wait, try connect from another PC etc.
$Listener.Stop();
If you happen to miss a Stop
command during debugging - just close and re-open the application from where you opened the socket - hanging port should be cleared. In my case it was PowerGUI script editor
.
Then use TcpClient to check it.
(new-object Net.Sockets.TcpClient).Connect($host, $port)
If you cannot connect, means the firewall is blocking it.
EDIT: To print a message when connection is received, you should be able to use this code (based on this article from MSDN):
#put this code in between Start and Stop calls.
while($true)
{
$client = $Listener.AcceptTcpClient();
Write-Host "Connected!";
$client.Close();
}
I needed something that would not only acknowledge that the port was open, but respond as well. So,here's my super-basic not-quite-telnet server.
Clear-Host; $VerbosePreference="Continue"; $Port=23
$EndPoint=[System.Net.IPEndPoint]::new([System.Net.IPAddress]::Parse("<ip address>"),$Port)
$Listener=[System.Net.Sockets.TcpListener]::new($EndPoint)
$KeepListening=$true
while ($KeepListening) {
$Listener.Start()
while (!$Listener.Pending) { Start-Sleep -Milliseconds 100 }
$Client=$Listener.AcceptTcpClient()
Write-Output "Incoming connection logged from $($Client.Client.RemoteEndPoint.Address):$($Client.Client.RemoteEndPoint.Port)"
$Stream=$Client.GetStream()
$Timer=10; $Ticks=0; $Continue=$true
$Response=[System.Text.Encoding]::UTF8.GetBytes("I see you. I will die in $($Timer.ToString()) seconds.`r`nHit <space> to add another 10 seconds.`r`nType q to quit now.`r`nType x to terminate listener.`r`n`r`n")
$Stream.Write($Response,0,$Response.Length)
$StartTimer=(Get-Date).Ticks
while (($Timer -gt 0) -and $Continue) {
if ($Stream.DataAvailable) {
$Buffer=$Stream.ReadByte()
Write-Output "Received Data: $($Buffer.ToString())"
if ($Buffer -eq 113) {
$Continue=$false
$Response=[System.Text.Encoding]::UTF8.GetBytes("`r`nI am terminating this session. Bye!`r`n")
}
elseif ($Buffer -eq 32) {
$Timer+=10
$Response=[System.Text.Encoding]::UTF8.GetBytes("`r`nAdding another 10 seconds.`r`nI will die in $($Timer.ToString()) seconds.`r`n")
}
elseif ($Buffer -eq 120) {
$Continue=$false
$KeepListening=$false
$Response=[System.Text.Encoding]::UTF8.GetBytes("`r`nI am terminating the listener. :-(`r`n")
}
else { $Response=[System.Text.Encoding]::UTF8.GetBytes("`r`nI see you. I will die in $($Timer.ToString()) seconds.`r`nHit <space> to add another 10 seconds.`r`nType q to quit this session.`r`nType x to terminate listener.`r`n`r`n") }
$Stream.Write($Response,0,$Response.Length)
}
$EndTimer=(Get-Date).Ticks
$Ticks=$EndTimer-$StartTimer
if ($Ticks -gt 10000000) { $Timer--; $StartTimer=(Get-Date).Ticks }
}
$Client.Close()
}
$Listener.Stop()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With