Visits

[+/-]
Today:
Yesterday:
Day before yesterday:
378
1
1006

-1005
This week:
Last week:
Week before last week:
1385
8214
7542

+672

Last month:
Month before last month:
7367
34182
33848

+334

Visitor Data

Proxy
38.107.179.211
United States
IP ADDRESS
38.107.179.211
-
Location
United States
-
Browser
Unknown Browser
-
Operating System
Unknown Operating System


   
Add to: JBookmarks Add to: Bookmarks.cc Add to: Digg Add to: Reddit Add to: Upchuckr Add to: StumbleUpon Add to: Slashdot Add to: Blogmarks Add to: Technorati Add to: Newsvine Add to: Blinkbits Add to: Smarking Add to: Spurl Add to: Google Information
Fun with NETCAT
Having fun with netcat.

Contributed by Girish Venkatachalam.


Netcat or nc in short can be aptly described as one of those two letter command-line tools that have all of legendary UNIX magic and power.

nc however is a new program and does not share the age of well known programs like cat or dd. However its power and versatility make one think why no one came up with this before.

Past is past. Let us worry about the future now. The future is VoIP, multimedia streaming, video on demand...but we are digressing. We are discussing netcat here.

Interestingly netcat is going to help us in future as the best way to debug future network protocols. Peer to peer networking is often touted as the wave of the future Internet and I shall talk about an interesting anecdote of how invaluable netcat proved to me whilst testing my peer topeer NAT traversal library.

It is not very likely you have used it. So let us start with few simple exams before we get on to nontrivial ones.

$nc -l -p 1234

will set up a TCP server on your machine. You can fire up

$nc localhost 1234

on another terminal which will set up a TCP client. You can now start talking between the two. Whatever you type here appears there and vice versa. Simple, isn't it?

on another terminal which will set up a TCP client. You can now start. Moreover it has power. The sort of power that only deceptively simple tools can possess. Let me demonstrate.

$nc -l -u -p 1234

will setup a UDP server. And you can talk to it with

$nc -u localhost 1234

Now, you will argue I am sure that telnet can be used as TCP clients.But it can hardly compare with netcat in its power and versatility as a network tool. Nowadays of course nobody uses telnet. We all use ssh.

Anyway netcat is used along with ssh for HTTP proxy authentication. And netcat can serve as simple inetd replacement, a simple command-line browser and so on. My God! You mean to say that netcat is so powerful?

It just depends on the way you look at it. netcat has a very clear goal and agenda. Of that of doing one thing and doing it well. And you use itas a duct tape for connecting with other similar tools to achieve your goal.

You could use netcat as a simple UDP or TCP based server and spawn a shell command every time a client connects. netcat can be used a simple chat application or even for sniffing network packets. The possibilities are endless.

The time has come to tell you how I used netcat for testing my p2p NAT library.

I used an approach called "UDP hole punching" for making inbound connections to machines behind NAT. Some say "protected by" but I shall avoid using that term.

I had to figure out if my NAT traversal library was doing its job. So once my library created the appropriate NAT mapping, I had to test application traffic. I used netcat for that.

In fact you can transfer files very simply even binary ones.

$nc -l -p 5000 > /tmp/network-file

and connect to this host across the Internet like this.

$nc server.com 5000 < network-file

You can even develop a simple VoIP application using netcat as it simply sets up a network pipe which you can send and receive data transparently.

For that you need to use a nice like G.729 using speex and use netcat's UDP serving capability. Voice traffic is delay sensitive and not loss sensitive and hence UDP is what we care. If you are lucky you could even use shell commands like this.