Is there some basic utility to open a specific network TCP port on my machine?
I need to test how my program deals with ports in the listening state.
Is there some basic utility to open a specific network TCP port on my machine?
I need to test how my program deals with ports in the listening state.
netcat should do what you want. Have it listen on you machine and echo stuff to STDOUT:
nc -4 -k -l -v localhost 1026
when you want it to close when the connection ends, don't use -k
You have
TCP Listen: http://www.allscoop.com/tcp-listen.php
Port Peeker: http://www.linklogger.com/portpeeker.htm
Microsoft's Command-line utility Portqry.exe
Try iperf. There is a version for Windows. You can just run it like iperf -s -p 1234
, and it will listen on port 1234. You can then connect to that port from a remote machine by doing something like:
telnet 192.168.1.1 1234
iperf -c 192.168.1.1 1234
portqry -n 192.168.1.1 -e 1234
You would need to obtain iperf.exe
or portqry.exe
for the last two. iPerf isn't strictly designed for this task, but it's great for troubleshooting connectivity, bandwidth availability, stress testing links, etc.
It looks like this utility will do exactly what you want, even displaying the received data if you like: http://www.drk.com.ar/builder.php
It has a GUI rather than just a command line, an advantage for some.
I like netcat on Windows, but downloading and installing stuff from the Internet is not always possible. Maybe you are setting up a production server, and you want to test your firewall rules before (and without) installing anything.
Most (all?) Windows servers have a JScript.net compiler. You can use paste in Notepad this plain old Windows batch file that is also a valid JScript.net program, a polyglot program.
polyglot-listener.bat 1234
on the command line to listen on port 1234
.The idea is to find the jsc.exe
executable on your system:
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do (
set "jsc=%%v"
)
And use it to compile the batch file.
"!jsc!" /nologo /out:"%APPDATA%\listener.exe" "%~dpsfnx0"
The batch file contains basic JScript.Net code that creates a synchronous socket, listen on it, accept the connection and drops everything that comes to it :
listener.Bind(localEndPoint);
listener.Listen(10);
// Start listening for connections.
while (true) {
var data:byte[] = new byte[1024];
Console.WriteLine("Waiting for a TCP connection on {0}:{1}...", ipAddress, port);
var handler = listener.Accept();
Console.WriteLine("Connected to {0}", handler.RemoteEndPoint);
try {
// An incoming connection needs to be processed.
while (handler.Receive(data) > 0);
} finally {
Console.WriteLine("Disconected\n");
}
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
The compiled program will be saved as %APPDATA%\listener.exe
. It can run on its own, copied to any server, but copy-paste in notepad and compiling it just-in-time from the polyglot batch file will work regardless of any security hurdles in your way.
The netpipes tools faucet and hose have always served me well, simplifying stdin
and stdout
for my programs to use over the network.
Similar to netcat.
Ubuntu description:
The netpipes package makes TCP/IP streams usable in shell scripts. It can also simplify client/server code by allowing the programmer to skip all the tedious programming bits related to sockets and concentrate on writing a filter, or other service.
EXAMPLES
This creates a TCP-IP socket on the local machine bound to port 3000.
example$ faucet 3000 --out --verbose tar -cf - .
Every time some process (from any machine) attempts to connect to port 3000 on this machine the faucet program will fork(2) a process and the child
will exec(2) a
tar -cf - .
TCP Listen is the BEST answer IMHO. I looked at and liked TCP Builder, but you NEED admin rights to run that app, you do NOT need them with TCP listener, and you also need to install TCP Builder, or unzip and copy a bunch of files, whereas TCP Listener is 1 EXE, nothing more.
TCP Listener also did not need admin rights, and when I AV scanned it nothing said it was malicious. Builder had 1 AV on Virustotal say it was bad, but it turned out to be a false positive (I hope) :)
While I got Builder to run sans admin rights, it could not hook the socket while Listener could. Once I did all my testing, I could just delete the 1 file of Listener and all was like before.
Netcat would have been nice, but I did not find a version that would work with 2012 or later server. So, to fully test if the network firewall and local firewalls allow specific TCP ports to connect, TCP listener seems like the best tool for this job.
Enjoy!
You can use netcat's Windows version:
nc -l -v localhost -p 7
If you have Python installed you can just paste the following into a Python shell:
For just opening the port without printing incoming data (e.g. network debugging and testing if you can connect to the port):
import socket
ip = '0.0.0.0'
port = 1337
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((ip, port))
s.listen(1)
print(s.accept())
If you also want to print the print the data sent to the connection:
import socket
from threading import Thread
ip = '0.0.0.0'
port = 1337
def print_connection_input(conn, addr):
print('New connection from', addr)
while True:
print(str(conn.recv(64), "utf-8"), end='')
while True:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((ip, port))
s.listen(1)
conn, addr = s.accept()
Thread(target=print_connection_input, args=(conn, addr)).start()
ip = '0.0.0.0'
will listen on all interfaces. You can also use a specific IP if you only want to listen on one interface.
This is the perfect use for Wireshark, a packet and protocol analyzer which sits in-between the Windows/Linux networking stack.
It will allow you to view all TCP/UDP packets that are received by your entire machine, regardless of the port. You can also tell the program to filter out only packets sent across a certain port for further analysis. The advantage to Wireshark is that it provides very detailed messages for each packet - source, destination, port, MAC addresses, data, dates, checksums, etc. Very useful (and free!) tool.
TCPView from the Sysinternals toolkit provides a very nice overview.