hn-classics/_stories/2009/6158259.md

73 KiB

Source

A Unix Utility You Should Know About: Netcat - good coders code, great coders reuse

good coders code, great coders reuse

| ----- | |

Lord, give us the wisdom to utter words that are gentle and tender, for tomorrow we may have to eat them.

Sen. Morris Udall

|

I am doing a startup!

Browserling

Cross-browser testing from your browser!

I have written my fourth book!

Perl Book

Be faster than Larry Wall in the shell!

Follow me on Twitter for my latest adventures!

[Unix Shell][17] [50 Comments][18] February 17, 2009

[A Unix Utility You Should Know About: Netcat][19]

This article is part of the article series "[Unix Utilities You Should Know About][20]."

<[- previous article][21] 1. A Unix Utility You Should Know About: Pipe Viewer 2. A Unix Utility You Should Know About: Netcat 3. A Unix Utility You Should Know About: lsof [next article ->][22]

![Unix Utilities][23]

This is the second post in the article series about Unix utilities that you should know about. In this post I will introduce you to the netcat tool or simply nc.

Netcat is often referred to as a "Swiss Army knife" utility, and for a good reason. Just like the multi-function usefulness of the venerable Swiss Army pocket knife, netcat's functionality is as helpful. Some of its features include port scanning, transferring files, port listening and it can be used a backdoor.

In 2006 netcat was ranked #4 in "[Top 100 Network Security Tools][24]" survey, so it's definitely a tool to know.

See the first post on [pipe viewer][25] for the introduction to this article series. If you feel like you are interested in this stuff, I suggest that you subscribe to [my rss feed][26] to receive my future posts automatically.

How to use nc?

Let's start with a few very simple examples and build up on those.

If you remember, I said that netcat was a Swiss Army knife. What would a Swiss Army knife be if it also wasn't a regular knife, right? That's why netcat can be used as a replacement of telnet:

$ nc www.google.com 80

It's actually much more handy than the regular telnet because you can terminate the connection at any time with ctrl+c, and it handles binary data as regular data (no escape codes, nothing).

You may add "-v" parameter for more verboseness, and two -v's (-vv) to get statistics of how many bytes were transmitted during the connection.

Netcat can also be used as a server itself. If you start it as following, it will listen on port 12345 (on all interfaces):

$ nc -l -p 12345

If you now connect to port 12345 on that host, everything you type will be sent to the other party, which leads us to using netcat as a chat server. Start the server on one computer:

# On a computer A with IP 10.10.10.10
$ nc -l -p 12345

And connect to it from another:

# On computer B
$ nc 10.10.10.10 12345

Now both parties can chat!

Talking of which, the chat can be turned to make two processes talk to each other, thus making nc do I/O over network! For example, you can send the whole directory from one computer to another by piping tar to nc on the first computer, and redirecting output to another tar process on the second.

Suppose you want to send files in /data from computer A with IP 192.168.1.10 to computer B (with any IP). It's as simple as this:

# On computer A with IP 192.168.1.10
$ tar -cf - /data | nc -l -p 6666

# On computer B
$ nc 192.168.1.10 6666 | tar -xf -

Don't forget to combine the pipeline with [pipe viewer][25] from previous article in this series to get statistics on how fast the transfer is going!

A single file can be sent even easier:

# On computer A with IP 192.168.1.10
$ cat file | nc -l -p 6666

# On computer B
$ nc 192.168.1.10 6666 > file

You may even copy and restore the whole disk with nc:

# On computer A with IP 192.168.1.10
$ cat /dev/hdb | nc -l -p 6666

# On computer B
$ nc 192.168.1.10 6666 > /dev/hdb

Note: It turns out that "-l" can't be used together with "-p" on a Mac! The solution is to replace "-l -p 6666" with just "-l 6666". Like this:

$ nc -l 6666

# nc now listens on port 6666 on a Mac computer

An uncommon use of netcat is port scanning. Netcat is not the best tool for this job, but it does it ok (the best tool is [nmap][27]):

$ nc -v -n -z -w 1 192.168.1.2 1-1000 
(UNKNOWN) [192.168.1.2] 445 (microsoft-ds) open
(UNKNOWN) [192.168.1.2] 139 (netbios-ssn) open
(UNKNOWN) [192.168.1.2] 111 (sunrpc) open
(UNKNOWN) [192.168.1.2] 80 (www) open
(UNKNOWN) [192.168.1.2] 25 (smtp) : Connection timed out
(UNKNOWN) [192.168.1.2] 22 (ssh) open

The "-n" parameter here prevents DNS lookup, "-z" makes nc not to receive any data from the server, and "-w 1" makes the connection timeout after 1 second of inactivity.

Another uncommon behavior is using netcat as a proxy. Both ports and hosts can be redirected. Look at this example:

$ nc -l -p 12345 | nc www.google.com 80

This starts a nc server on port 12345 and all the connections get redirected to google.com:80. If you now connect to that computer on port 12345 and do a request, you will find that no data gets sent back. That's correct, because we did not set up a bidirectional pipe. If you add another pipe, you can get the data back on another port:

$ nc -l -p 12345 | nc www.google.com 80 | nc -l -p 12346

After you have sent the request on port 12345, connect on port 12346 to get the data.

Probably the most powerful netcat's feature is making any process a server:

$ nc -l -p 12345 -e /bin/bash

The "-e" option spawns the executable with it's input and output redirected via network socket. If you now connect to the host on port 12345, you may use bash:

$ nc localhost 12345
ls -las
total 4288
   4 drwxr-xr-x 15 pkrumins users    4096 2009-02-17 07:47 .
   4 drwxr-xr-x  4 pkrumins users    4096 2009-01-18 21:22 ..
   8 -rw-------  1 pkrumins users    8192 2009-02-16 19:30 .bash_history
   4 -rw-r--r--  1 pkrumins users     220 2009-01-18 21:04 .bash_logout
   ...

The consequences are that nc is a popular hacker tool as it is so easy to create a backdoor on any computer. On a Linux computer you may spawn /bin/bash and on a Windows computer cmd.exe to have total control over it.

That's everything I can think of. Do you know any other netcat uses that I did not include?

How to install nc?

If you're on Debian or Debian based system such as Ubuntu do the following:

$ sudo aptitude install netcat

If you're on Fedora or Fedora based system such as CentOS do:

$ sudo yum install netcat

If you're on Slackware, FreeBSD, NetBSD, Solaris or Mac, download the [source code of nc][28] and just:

$ tar -zxf nc-version.tar.gz
$ cd nc-version
$ ./configure && sudo make install

Another way to do it on Mac, if you have [MacPorts][29] is:

$ sudo port install netcat

On Slackware you can actually install it as a package from n/ package directory:

$ sudo installpkg nc-1.10-i386-1.tgz

If you're on Windows, download the Windoze port of it from [securityfocus][30].

The manual of the utility can be found here [man nc][31].

Have fun netcatting, and until next time!

[Tweet][32]

[Tags][33]: [linux][34], [nc][35], [net cat][36], [netcat][37], [tar][38], [tool][39], [unix][40], [utility][41]

[50 Comments][42] 329,210 Views Short URL

This article is part of the article series "[Unix Utilities You Should Know About][20]."

<[- previous article][21] 1. A Unix Utility You Should Know About: Pipe Viewer 2. A Unix Utility You Should Know About: Netcat 3. A Unix Utility You Should Know About: lsof [next article ->][22]

  • [A Unix Utility You Should Know About: Pipe Viewer][21]
  • [Bash Emacs Editing Mode Cheat Sheet][43]
  • [Working Productively in Bash's Vi Command Line Editing Mode (with Cheat Sheet)][44]
  • [A Unix Utility You Should Know About: lsof][22]
  • [The Definitive Guide to Bash Command Line History][45]
  • [Announcing my second e-book "Sed One-Liners Explained"][46]
  • [How to run unkillable* (persistent) programs in Linux][47]
  • [Announcing my first e-book "Awk One-Liners Explained"][48]
  • [Announcing my third e-book "Perl One-Liners Explained"][49]
  • [Sed - UNIX Stream Editor - Cheat Sheet][50]
  • Comments

![][51]

Mark [Permalink][52]

February 17, 2009, 18:48

# On computer A with IP 192.168.1.10
$ cat file | nc -l -p 6666

And of course, if you've been following along for a week or two, you know that this (BING!) is a Useless Use of Cat!

Remember, nearly all cases where you have:

cat file | some_command and its args ...

you can rewrite it as:

some_command and its args ... < file

and in some cases, but not this one, you can move the filename to the arglist as in:

some_command and its args ... file

Just another Useless Use of the Internet...

[Reply to this comment][53]

![][54]

[asperous][55] [Permalink][56]

August 05, 2013, 04:26

I see your point and for everyone that doesn't see this tip, it's a great one.

I personally just prefer to use cat. It keeps the data flow a nice left-to-right, which makes it easier to read.

Data flow <------
|
------>
cmd < file | cmd

Data flow -------->
cat file | cmd | cmd

[Reply to this comment][57]

![][58]

Steve Massey [Permalink][59]

January 30, 2017, 00:18

you can do
<file cmd | cmd

which is the same as
cmd <file | cmd

but with the right flow

[Reply to this comment][60]

![][61]

Ed [Permalink][62]

August 05, 2013, 21:47

That's fine until you get the redirect the wrong way around and blow away a file...

[Reply to this comment][63]

![][64]

TheDude [Permalink][65]

February 17, 2009, 18:48

Apparently on some distros, its an error to specify -p with -l. nc -l 6666 works.

[Reply to this comment][66]

![][64]

TheDude [Permalink][67]

February 17, 2009, 18:52

@Mark:
Except in this case.

nc -l -p 6666 file

doesn't work.

You also wouldn't be able to use pv to view the progress of the stream.

[Reply to this comment][68]

![][69]

yitzle [Permalink][70]

February 17, 2009, 18:53

And for the commands that do not take a filename as an argument, you can do:

$ command < file

or

$ nc -l -p 6666 < file

Regarding tar, by default it uses STDIN, so -f - is the default behavior. Therefore, these two commands do the same thing:

$ tar -c /data
$ tar -cf - /data

(Ditto with the tar -x)

All in all, great article! Thanks.

[Reply to this comment][71]

![][72]

[Peter Krumins][73] [pkrumins][74] [Permalink][75]

February 17, 2009, 18:56

Mark, your comment is something that people call sometimes call ["useless use" of "useless use"][76]. There is nothing wrong with uselessly using cat. It makes it more readable sometimes.

[Reply to this comment][77]

![][78]

[Eric D][79] [Permalink][80]

February 17, 2009, 19:10

cat file | nc -l -p 6666

Bzzzzt. Useless use of cat.

nc -l -p 6666 < file

[Reply to this comment][81]

![][51]

Mark [Permalink][82]

February 17, 2009, 19:12

Yes, I know there is no practical reason to avoid using cat. But readers of a blog discussing command-line utilities should know about the <file command syntax.

I won't try editing my comment for html compliance, rather I would direct you to http://partmaps.org/era/unix/award.html

[Reply to this comment][83]

![][84]

[Mina Naguib][85] [Permalink][86]

February 17, 2009, 20:05

Used netcat as part of a bigger pipe to "mirror traffic" over from a simple box that only had tcpdump to a fancier box where it can be analyzed with ethereal/tethereal:

Command 1:
nc -l -p 6666 | tethereal -V -i -

Command 2:
ssh -R 6666:127.0.0.1:6666 remotemachine "tcpdump -l -p -s 0 port not 22 -w - | nc localhost 6666"

[Reply to this comment][87]

![][88]

james [Permalink][89]

February 17, 2009, 20:40

this netcat guide is based on a version of netcat that isn't universal. There is the original, the gnu version and a number of rewrites with different options

[Reply to this comment][90]

![][91]

Tim [Permalink][92]

February 17, 2009, 21:45

So if I create a named pipe with mkfifo or mknod -p, can I create a general port-swapping proxy with it?

[Reply to this comment][93]

![][94]

Roman [Permalink][95]

February 17, 2009, 21:48

That's why netcat can be used as a replacement of telnet

In order to use netcat as telnet, you need to use the -t option. It does nothing more than rejecting all options, though, and it doesn't prevent weird characters showing on your screen.

It's also kind of amusing that the link to SecurityFocus doesn't actually lead there.

@james: What do you mean by universal? I'm not seeing any options that aren't supported by the original netcat.

@TheDude: I wonder which distros and which version of netcat don't support -p.

[Reply to this comment][96]

![][97]

Galactic Dominator [Permalink][98]

February 17, 2009, 21:59

I take it you're unfamiliar with the FreeBSD ports tree.

cd /usr/ports/net/netcat
make install clean

or install the bin

pkg_add -r netcat

[Reply to this comment][99]

![][100]

[olle][101] [Permalink][102]

February 17, 2009, 22:14

A more powerfull utility than netcat is socat. http://www.dest-unreach.org/socat/doc/socat.html

Very easy to translate any typ of traffic to another.

[Reply to this comment][103]

![][104]

Tarrant [Permalink][105]

February 17, 2009, 22:15

@Roman: The original version (BSD's) I know for sure can't have the -p following a -l.

I think this is one of the points that james was trying to make about the gnu version being different. Other than that I'm sure there are differences but I haven't gone and
compared the man pages to each other.

@Galatic Dominator: I'm not sure why but my FreeBSD box had it automatically is that just a matter of which package set I grabbed in the begging?

[Reply to this comment][106]

![][107]

Jon Craton [Permalink][108]

February 17, 2009, 23:06

You have linked to a copy of netcat on my server in your link to netcat for windows. That's totally fine with me, but just to be clear, I am not affiliated with security focus in any way. They simply link to my server as well.

[Reply to this comment][109]

![][110]

Pat [Permalink][111]

February 18, 2009, 05:11

Check out the instructions at [this webpage][112] under the title Piping Audio Around the House. You can use the sox utility in combination with netcat to pipe audio over LAN.

To install sox:
sudo apt-get install sox libsox-fmt-oss libsox-fmt-mp3

[Reply to this comment][113]

![][114]

[Jerry Walsh][115] [Permalink][116]

February 18, 2009, 11:40

Netcat is now part of the base system in FreeBSD.

There is no need to compile it from source (as you suggest) or install it via the ports.

[Reply to this comment][117]

![][118]

[Leon][119] [Permalink][120]

February 18, 2009, 12:57

I couldn't get the chat thing to work. How about extending this tutorial with some trouble shooting tips?

leke@leke-desktop:~$ telnet www.google.com 80
Trying 74.125.79.103...
Connected to www.l.google.com.
Escape character is '^]'.
Connection closed by foreign host.
leke@leke-desktop:~$ 
leke@leke-desktop:~$ nc www.google.com 80
leke@leke-desktop:~$ nc -v www.google.com 80
DNS fwd/rev mismatch: www.l.google.com != ey-in-f103.google.com
DNS fwd/rev mismatch: www.l.google.com != ey-in-f99.google.com
DNS fwd/rev mismatch: www.l.google.com != ey-in-f147.google.com
DNS fwd/rev mismatch: www.l.google.com != ey-in-f104.google.com
www.l.google.com [74.125.79.103] 80 (www) open
leke@leke-desktop:~$ 

This looks pretty off too.

[Reply to this comment][121]

![][122]

mourad [Permalink][123]

February 19, 2009, 12:01

Great post!
I was wondering is there any available free unix shells out there ? Say that I could connect to via netcat with total annonyma !?

[Reply to this comment][124]

![][125]

Craig Hughes [Permalink][126]

February 19, 2009, 19:08

Netcat is a great, simple tool. But sometimes it's not quite enough for what you need to do, eg when you need to control some of the socket options on the connection you're creating (eg if you're talking to a serial device and need to set line speed or something). For Netcat on 'roids, check out socat. Socat has more options than the Chicago Board of Trade, but once you figure it out a little, it can be very helpful. 9 times out of 10, netcat does what you want, but for that extra 1/10 where you think to yourself "argh I wish netcat could just do XYZ too..." you'll want to know about socat.

[Reply to this comment][127]

![][128]

Joeri [Permalink][129]

February 20, 2009, 17:40

Macs have their own standard /usr/bin/nc which is , as you have correctly noticed, doesn't accept -p, but the one you install with ports behaves the way you describe.

[Reply to this comment][130]

![][131]

shah [Permalink][132]

March 03, 2009, 00:42

Great utility.

I want to know whether "netcat" can be used to print unix files to printer connected to windows pc?
OR any other technique?

Need your help!.

Thanks, shah

[Reply to this comment][133]

![][134]

[avar][135] [Permalink][136]

March 29, 2009, 12:10

there is re-writtend version if netcat called ncat
can be found on nmaps top sectools section

[Reply to this comment][137]

![][138]

[MMF][139] [Permalink][140]

June 16, 2009, 00:35

Useful article
thanks a lot.

[Reply to this comment][141]

![][142]

Xezlec [Permalink][143]

July 23, 2009, 20:48

There certainly can be good reasons not to uselessly use cat, and getting into the habit of doing so can be a bad thing, especially if your code is likely to be used as a bible by relatively uninformed users (as yours is).

I work at a place where relatively uninformed users routinely set up large, super-high-bandwidth pipes on compute clusters using cat, in which case cat may waste significant CPU (what's the block size that it's reading from disk, I wonder?). Furthermore, cat gives you a one-way stream as output, so downstream apps don't have the ability to get information about the original file (such as size) or to seek back and forth. In general, streams < files.

The end result is that my carefully written C code with all its carefully optimized seeking behavior ends up wasting hours burning through hundreds of terabytes of unneeded data just because it doesn't have a seekable input descriptor, and then the users complain that their code is slow and after debugging I find that they're doing this junk and remind them (again!) not to do this, and then two months later they copy some code off of yet another blog like this and yet again don't notice that the cat is not necessary and yet again complain that their code is slow...... etc.

So yeah, I guess I feel like if I wrote a blog claiming to be anything resembling a how-to, I'd try to write pretty good code, just to be nice and not give people bad ideas. But it's your blog of course, and your call.

[Reply to this comment][144]

![][145]

Debty [Permalink][146]

July 26, 2009, 21:58

Ahaan... I will follow.

[Reply to this comment][147]

![][148]

argv [Permalink][149]

July 30, 2009, 03:02

I don't understand why people like to use cat when it's not necessary. Maybe they don't understand what cat is doing. I must agree with Xezlec. A waste of resources.

I don't understand why for many simple jobs people use perl when they could use sed. In the event it's faster, it's likely this is only because the entire file is read into memory. Is that always necesary?

Maybe users just need a better understanding of what these tools do: not just the end result, but the process.

I'd like to see PK play around with DJ Bernstein's tools, e.g. tcpclient and the rest of that suite.

Also, there netpipes, socketpipe, etc.

It's much easier to use these tools if you understand how they work. Merely knowing what they do is, in my opinion, not enough. There is a lengthy, popular, and informal tutorial on UNIX socket programming if you search around. Might be helpful to get a grasp of the basics before one starts using socat.

[Reply to this comment][150]

![][72]

[Peter Krumins][73] [pkrumins][74] [Permalink][151]

July 31, 2009, 04:01

argv, thanks for your cool comments. I'll look into the djb's tools and see if I can write an article on them. I am well familiar with socket programming, shouldn't be a problem for me to understand them.

Xezlec and argv, I am just used to 'cat foo | prog' instead of 'prog < foo' or 'prog foo'. I am well aware of useless use of cat there. Also I like that after 'cat foo' I can forget about 'foo' altogether and only think of how 'prog' will operate on the input flow. Where as if I type 'prog < foo' or 'prog foo', I have to think about both 'foo' and how will 'prog' operate on 'foo' at the same time. It's like thinking from functional programmers point of view.

I'm neutral on the issue of useless use of cat. One day I may use it, the other I may not. And I will not get into live-or-die argument about it. It's like arguing is tabs betters than spaces. Or do you write 'char foo' or 'char foo' or 'char * foo'. All of them are acceptable, so just use any of them and create something cool, but be consistent.

[Reply to this comment][152]

![][148]

argv [Permalink][153]

July 31, 2009, 22:12

Also check out "dog". It is another alternative to nc.

If you can filter through the complaints about people (personal squabbles between computer scientists, complaints about "arrogance", etc.), djb's site has some very clear thinking about some things that really need to "reconsidered". One of those things is DNS. Despite his many admirable tools, in my opinion the best page he has on this subject is one where he describes "vapourware". I hope you can read that one.

As to the useless cat issue, you won't see this habit on the grymoire site or the sites it references. When one is being paid to optimise and gain efficiency to reduce costs, eliminating these bad habits, e.g. senseless cat usage, is a part of the job. Your article on shell line editing and history features was a good example of optimising and gaining efficiency.

[Reply to this comment][154]

![][148]

argv [Permalink][155]

August 05, 2009, 03:11

One more that I forgot, along the lines of nc, tcpclient, etc.:

zsh's ztcp module

On my OS the zsh executable is actually smaller than the bash executable, which piques my curiousity. The size differences between the two packages might be largely attributable to all the zsh modules and other zsh 'extras'.

I've tried bash's tcp functionality a few times, but never got hooked. Perhaps because it did not feel robust, or perhaps because there are so many other more 'reliable' tools. But maybe ztcp is worth a look.

[Reply to this comment][156]

![][72]

[Peter Krumins][73] [pkrumins][74] [Permalink][157]

August 05, 2009, 05:11

argv, I have played with bash's tcp functionality a little, it seemed ok for very simple tasks. But I agree that it's not very reliable.

I hadn't heard of zsh's ztcp and will definitely investigate it.

[Reply to this comment][158]

![][148]

argv [Permalink][159]

August 10, 2009, 13:25

That page on djb's site I was hoping you'd look at (a different topic, but an important one)...
http://cr.yp.to/dnsroot.html

I realised the page is quite difficult to find intentionally on the djb site.

Anyway, if you do follow up on the subject of the Berkeley sockets, he also lists [some of] the other apps that tcpclient "competes" with. Socket, Netpipes, etc.

[Reply to this comment][160]

![][161]

[Abottleinfrontofme Frontallobotomy][162] [Permalink][163]

December 26, 2009, 14:39

# On computer A with IP 192.168.1.10$ cat file | nc -l -p 6666# On computer B$ nc 192.168.1.10 6666 > file


I thought this was a great example of the power of nc. I could give two flying flux capacitors whether cat was a useless use. Seriously girls, don't chop your hand off when you break a fingernail. This piece is not about squeezing every cpu cycle out of your machine but demonstrating nc. And separating 'cat' with a pipe actually does make more clear exactly what is going on.

[Reply to this comment][164]

![][161]

[Abottleinfrontofme Frontallobotomy][162] [Permalink][165]

December 26, 2009, 14:40

# On computer A with IP 192.168.1.10
$ cat file | nc -l -p 6666
# On computer B
$ nc 192.168.1.10 6666 > file

I thought this was a great example of the power of nc. I could give two flying flux capacitors whether cat was a useless use. Seriously girls, don't chop your hand off when you break a fingernail. This piece is not about squeezing every cpu cycle out of your machine but demonstrating nc. And separating 'cat' with a pipe actually does make more clear exactly what is going on.

[Reply to this comment][166]

![][167]

[sanalika][168] [Permalink][169]

February 28, 2010, 23:18

Great utility.

I want to know whether "netcat" can be used to print unix files to printer connected to windows pc?
OR any other technique?

Need your help!.

Thanks, shah

[Reply to this comment][170]

![][148]

argv [Permalink][171]

March 26, 2010, 11:22

There are so many choices and it takes time to experiment with them all, but I've started to become preferential to Richard Stevens' sock program.

It might be interesting to do a comparison of all these network read/write programs in terms of flexibility and performance.

[Reply to this comment][172]

![][173]

[rick][174] [Permalink][175]

April 04, 2010, 23:58

thanks for this info

[Reply to this comment][176]

![][177]

langagemachine [Permalink][178]

November 09, 2010, 16:48

The -e switch does not seem to work here (Ubuntu 10.4) ?

nc -l -p 12345 -e /bin/bash
nc: invalid option -- 'e'
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]

[Reply to this comment][179]

![][177]

alex [Permalink][180]

March 16, 2011, 14:32

It is a variant of NC. The '-e' can be considered a security issue so some vendors do not include it in their distro.

[Reply to this comment][181]

![][182]

Jonatan Jönsson [Permalink][183]

May 11, 2016, 08:52

You can use nc -l 1337 | /bin/bash instead!

[Reply to this comment][184]

![][185]

[Konstantin][186] [kstepme][187] [Permalink][188]

December 29, 2012, 15:07

You say:

That's correct, because we did not set up a bidirectional pipe. If you add another pipe, you can get the data back on another port:
$ nc -l -p 12345 | nc www.google.com 80 | nc -l -p 12346

But that's not the whole truth. Actually, you can do bidirectional proxy with a little trick involving named pipes:

$ mkfifo ~/loop.pipe && cat ~/loop.pipe | nc -l -p 12345 | nc www.google.com 80 > ~/loop.pipe

This way everything you send to port 12345 is redirected to www.google.com:80, and everything sent back from www.google.com:80 will be redirected back to local port 12345.

[Reply to this comment][189]

![][190]

[Terry A. Davis][191] [TempleOS][192] [Permalink][193]

August 05, 2013, 04:21

I have "Type()" at the command line for cat. It can type BMP files to the command-line. The command-line can show graphics.

[Reply to this comment][194]

![][190]

[Terry A. Davis][195] [TempleOS][192] [Permalink][196]

August 05, 2013, 04:24

TempleOS has no networking. Linux was inspired by the usage model of a mainframe. TempleOS was inspired by the usage model of a C64/AppleII -- what you did with it.

[Reply to this comment][197]

![][198]

null [Permalink][199]

August 05, 2013, 19:32

i find it rather interesting reading teh comments about the -p flag not being correct in some circumstances, had anyone properly researched this they would realize that they are probably using the netcat-openbsd release as opposed to netcat-traditional

[Reply to this comment][200]

![][198]

null [Permalink][201]

August 05, 2013, 19:34

in reference to my previous comment the issue with the -e flag also pertains to distros being shipped with netcat-openbsd and not netcat-traditional

[Reply to this comment][202]

![][182]

Jonatan Jönsson [Permalink][203]

May 11, 2016, 08:51

On the default nc on Mac "-e /bin/bash" does not work. You can use nc -l 1337 | /bin/bash instead!

[Reply to this comment][204]

Leave a new comment

Name:

E-mail: ([why do I need your e-mail?][205])

It would be nice if you left your e-mail address. Sometimes I want to send a private message, or just thank for the great comment. Having your e-mail really helps.

I will never ever spam you.

Twitter: (Your twitter handle, if you have one.)

Website:

Comment:

[Comment Help][206]

  • use <pre>...</pre> to insert a plain code snippet.

  • use <pre lang="**lang**">...</pre> to insert a syntax highlighted code snippet.
    For example, <pre lang="**python**">...</pre> will insert Python highlighted code.

  • use <code>...</code> to highlight a variable or a single shell command.

  • use <a href="http://www.catonmat.net/url" nospam>title</a> to insert links.

  • use other HTML tags, such as, <b>, <i>, <blockquote>, <sup>, <sub> for text formatting.

Type the word "network_132": (just to make sure you're a human)

Please preview the comment before submitting to make sure it's OK.

Advertisements

About the site:

[ ![Peter Krumins][207] ][208] Peter Krumins' blog about programming, hacking, software reuse, software ideas, computer security, browserling, google and technology.

Reach me at:

![][209]

Or meet me on:

  • [Twitter][210]
  • ![][211][Facebook][212]
  • ![][213][Plurk][214]
  • ![][215][more][206]
  • ![][216][GitHub][217]
  • ![][218][LinkedIn][219]
  • ![][220][FriendFeed][221]
  • ![][222][Google Plus][223]

Subscribe to my posts:

Subscribe through an RSS feed:

[ ![][224] ![][225] ][226] ([what is rss?][227])

Subscribe through email:

Enter your email address:

Delivered by [FeedBurner][228]

My Amazon Wish List

I love to read science books. They make my day and I get ideas for awesome blog posts, such as [Busy Beaver][229], [On Functors][230], [Recursive Regular Expressions][231] and [many others][232].

Take a look at my ![][233][Amazon wish list][234], if you're curious about what I have planned reading next, and want to surprise me. :)

My Books

  • [Awk Programming Book][235]
  • [Sed Programming Book][236]
  • [Perl Programming Book][237]

My Other Websites

  • [Free Science Online][238]
  • [Free Science Videos][239]

Top Ten Articles:

  • [Top Ten One-Liners from CommandLineFu Explained][240]
  • [Turn any Linux computer into SOCKS5 proxy in one command][241]
  • [My Job Interview at Google][242]
  • [Sed One-Liners Explained, Part I: File Spacing, Numbering and Text Conversion and Substitution][243]
  • [MIT's Introduction to Algorithms, Lectures 1 and 2: Analysis of Algorithms][244]
  • [A HTTP Proxy Server in 20 Lines of node.js Code][245]
  • [Awk One-Liners Explained, Part I: File Spacing, Numbering and Calculations][246]
  • [Low Level Bit Hacks You Absolutely Must Know][247]
  • [The Definitive Guide to Bash Command Line History][248]
  • [Working Productively in Bash's Vi Command Line Editing Mode (with Cheat Sheet)][249]

[See all top articles][250]

Top Ten Downloads:

  • [perl1line.txt][251] (372,978)
  • [bash redirections cheat sheet (.pdf)][252] (266,045)
  • [bash history cheat sheet (.pdf)][253] (230,556)
  • [awk cheat sheet (.pdf)][254] (229,175)
  • [sed stream editor cheat sheet (.pdf)][255] (171,782)
  • [screen cheat sheet (.pdf)][256] (169,707)
  • [bash vi editing mode cheat sheet (.pdf)][257] (168,734)
  • [perl's pack/unpack and printf cheat sheet (.pdf)][258] (153,284)
  • [awk cheat sheet (.txt)][259] (140,725)
  • [perl's special variable cheat sheet (.pdf)][260] (137,758)

[See all downloads][261]

Recent Articles:

  • [Browserling is now a top 40k website in the world][262]
  • [Knuth vs McIlroy (Epic Computer Science Battles)][263]
  • [1000 days of commits][264]
  • [Browserling has helped Cameroonians restore Internet freedom][265]
  • [Why does Browserling's comic have 10 different formats?][266]
  • [Eighth site in online tools network: onlineBINARYtools.com][267]
  • [How much traffic do domain typos get?][268]
  • [Larry Wall illustrated][269]
  • [Seventh site in online tools network: onlineYAMLtools.com][270]
  • [Merry browsery Christmas and Happy browsery New Year!][271]

[See more detailed list of recent articles][272]

Article Categories:

  • [Awk Programming][273] (8)
  • [Browserling][274] (110)
  • [Cheat Sheets][275] (13)
  • [Computer Science][276] (9)
  • [Hacker's Approach][277] (8)
  • [Howto][278] (12)
  • [Ideas for Later][279] (1)
  • [Interviews][280] (8)
  • [Introduction to Algorithms][281] (15)
  • [Linear Algebra][282] (6)
  • [Mathematics][283] (1)
  • [Misc][284] (32)
  • [Musical Geek Friday][285] (17)
  • [My Favorite Books][286] (7)
  • [Node.js Modules][287] (15)
  • [Perl Programming][288] (16)
  • [Programming][289] (38)
  • [Projects][290] (13)
  • [Security][291] (4)
  • [The New Catonmat][292] (1)
  • [Tools][293] (1)
  • [Unix Shell][294] (31)
  • [Video Lectures][295] (18)
  • [Visual Math Friday][296] (1)

[See more detailed category information][297]

Article Archive:

  • [February, 2018][298] (3)
  • [January, 2018][299] (6)
  • [December, 2017][300] (5)
  • [November, 2017][301] (8)
  • [October, 2017][302] (5)
  • [September, 2017][303] (1)
  • [August, 2017][304] (4)
  • [July, 2017][305] (3)
  • [June, 2017][306] (1)
  • [May, 2017][307] (1)
  • [April, 2017][308] (4)
  • [March, 2017][309] (2)
  • [February, 2017][310] (4)
  • [January, 2017][311] (1)
  • [December, 2016][312] (5)
  • [November, 2016][313] (2)
  • [October, 2016][314] (2)
  • [September, 2016][315] (2)
  • [August, 2016][316] (3)
  • [July, 2016][317] (3)
  • [June, 2016][318] (1)
  • [May, 2016][319] (1)
  • [April, 2016][320] (1)
  • [March, 2016][321] (5)
  • [February, 2016][322] (1)
  • [January, 2016][323] (4)
  • [December, 2015][324] (4)
  • [November, 2015][325] (4)
  • [October, 2015][326] (7)
  • [September, 2015][327] (9)
  • [August, 2015][328] (1)
  • [July, 2015][329] (2)
  • [June, 2015][330] (2)
  • [May, 2015][331] (1)
  • [April, 2015][332] (6)
  • [March, 2015][333] (1)
  • [February, 2015][334] (1)
  • [January, 2015][335] (1)
  • [December, 2014][336] (1)
  • [November, 2014][337] (1)
  • [October, 2014][338] (2)
  • [September, 2014][339] (1)
  • [August, 2014][340] (1)
  • [July, 2014][341] (1)
  • [June, 2014][342] (1)
  • [May, 2014][343] (1)
  • [April, 2014][344] (1)
  • [March, 2014][345] (3)
  • [February, 2014][346] (3)
  • [January, 2014][347] (5)
  • [December, 2013][348] (1)
  • [November, 2013][349] (1)
  • [October, 2013][350] (1)
  • [September, 2013][351] (1)
  • [August, 2013][352] (1)
  • [July, 2013][353] (1)
  • [June, 2013][354] (1)
  • [May, 2013][355] (1)
  • [April, 2013][356] (1)
  • [March, 2013][357] (1)
  • [February, 2013][358] (2)
  • [January, 2013][359] (4)
  • [December, 2012][360] (1)
  • [November, 2012][361] (3)
  • [October, 2012][362] (4)
  • [September, 2012][363] (3)
  • [August, 2012][364] (2)
  • [July, 2012][365] (2)
  • [June, 2012][366] (1)
  • [May, 2012][367] (4)
  • [April, 2012][368] (3)
  • [March, 2012][369] (2)
  • [February, 2012][370] (1)
  • [January, 2012][371] (4)
  • [December, 2011][372] (15)
  • [November, 2011][373] (3)
  • [October, 2011][374] (2)
  • [September, 2011][375] (2)
  • [August, 2011][376] (3)
  • [July, 2011][377] (1)
  • [June, 2011][378] (2)
  • [May, 2011][379] (1)
  • [April, 2011][380] (1)
  • [March, 2011][381] (2)
  • [February, 2011][382] (2)
  • [January, 2011][383] (1)
  • [December, 2010][384] (2)
  • [November, 2010][385] (1)
  • [October, 2010][386] (2)
  • [September, 2010][387] (1)
  • [August, 2010][388] (2)
  • [July, 2010][389] (2)
  • [June, 2010][390] (2)
  • [May, 2010][391] (2)
  • [April, 2010][392] (2)
  • [March, 2010][393] (5)
  • [February, 2010][394] (5)
  • [January, 2010][395] (7)
  • [December, 2009][396] (6)
  • [November, 2009][397] (6)
  • [October, 2009][398] (2)
  • [September, 2009][399] (3)
  • [August, 2009][400] (2)
  • [July, 2009][401] (4)
  • [June, 2009][402] (1)
  • [May, 2009][403] (1)
  • [April, 2009][404] (1)
  • [March, 2009][405] (2)
  • [February, 2009][406] (7)
  • [January, 2009][407] (4)
  • [December, 2008][408] (8)
  • [November, 2008][409] (7)
  • [October, 2008][410] (5)
  • [September, 2008][411] (5)
  • [August, 2008][412] (9)
  • [July, 2008][413] (14)
  • [June, 2008][414] (4)
  • [May, 2008][415] (5)
  • [April, 2008][416] (8)
  • [March, 2008][417] (3)
  • [February, 2008][418] (1)
  • [January, 2008][419] (1)
  • [December, 2007][420] (1)
  • [November, 2007][421] (1)
  • [October, 2007][422] (3)
  • [September, 2007][423] (5)
  • [August, 2007][424] (10)
  • [July, 2007][425] (9)

[See more detailed list of all articles][272]

Advertisements

![][426]
[(advertise on catonmat)][427]

![tumblr tracker][428]

![][429]

[17]: http://www.catonmat.net/category/unix-shell "See all posts in category "Unix Shell"" [18]: http://www.catonmat.net/blog/unix-utilities-netcat/#comments "50 people have commented on "A Unix Utility You Should Know About: Netcat"" [19]: http://www.catonmat.net/blog/unix-utilities-netcat/ "A Unix Utility You Should Know About: Netcat" [20]: http://www.catonmat.net/series/unix-utilities-you-should-know-about "Article series "Unix Utilities You Should Know About"" [21]: http://www.catonmat.net/blog/unix-utilities-pipe-viewer/ "A Unix Utility You Should Know About: Pipe Viewer" [22]: http://www.catonmat.net/blog/unix-utilities-lsof/ "A Unix Utility You Should Know About: lsof" [23]: http://www.catonmat.net/blog/wp-content/uploads/2009/02/unix-utilities.jpg [24]: http://sectools.org/ [25]: http://www.catonmat.net/blog/unix-utilities-pipe-viewer/ [26]: http://feeds.feedburner.com/catonmat [27]: http://nmap.org/ [28]: http://netcat.sourceforge.net/download.php [29]: http://www.macports.org/ [30]: http://www.securityfocus.com/tools/139 [31]: http://linux.die.net/man/1/nc [32]: https://twitter.com/share [33]: http://www.catonmat.net/tags "All catonmat tags" [34]: http://www.catonmat.net/tag/linux "See all pages tagged "linux"" [35]: http://www.catonmat.net/tag/nc "See all pages tagged "nc"" [36]: http://www.catonmat.net/tag/net-cat "See all pages tagged "net cat"" [37]: http://www.catonmat.net/tag/netcat "See all pages tagged "netcat"" [38]: http://www.catonmat.net/tag/tar "See all pages tagged "tar"" [39]: http://www.catonmat.net/tag/tool "See all pages tagged "tool"" [40]: http://www.catonmat.net/tag/unix "See all pages tagged "unix"" [41]: http://www.catonmat.net/tag/utility "See all pages tagged "utility"" [42]: http://www.catonmat.net/blog/unix-utilities-netcat/#comments "Comment on "A Unix Utility You Should Know About: Netcat"" [43]: http://www.catonmat.net/blog/bash-emacs-editing-mode-cheat-sheet/ "Bash Emacs Editing Mode Cheat Sheet" [44]: http://www.catonmat.net/blog/bash-vi-editing-mode-cheat-sheet/ "Working Productively in Bash's Vi Command Line Editing Mode (with Cheat Sheet)" [45]: http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line-history/ "The Definitive Guide to Bash Command Line History" [46]: http://www.catonmat.net/blog/sed-book/ "Announcing my second e-book "Sed One-Liners Explained"" [47]: http://www.catonmat.net/blog/unkillable-linux-programs/ "How to run unkillable* (persistent) programs in Linux" [48]: http://www.catonmat.net/blog/awk-book/ "Announcing my first e-book "Awk One-Liners Explained"" [49]: http://www.catonmat.net/blog/perl-book/ "Announcing my third e-book "Perl One-Liners Explained"" [50]: http://www.catonmat.net/blog/sed-stream-editor-cheat-sheet/ "Sed - UNIX Stream Editor - Cheat Sheet" [51]: http://www.gravatar.com/avatar/f6dee22da63e21b1f135cff6a9bc3e20.jpg?s=40 [52]: http://www.catonmat.net/c/1902 "Permanent link to the comment" [53]: http://www.catonmat.net/c/1902?reply "Reply to comment by Mark" [54]: http://www.gravatar.com/avatar/54c18ad76eb50221238e108d33aacdde.jpg?s=40 [55]: http://asperous.us "http://asperous.us" [56]: http://www.catonmat.net/c/45642 "Permanent link to the comment" [57]: http://www.catonmat.net/c/45642?reply "Reply to comment by asperous" [58]: http://www.gravatar.com/avatar/76dacd6e80f99b5b2900341c2a1dbef7.jpg?s=40 [59]: http://www.catonmat.net/c/79077 "Permanent link to the comment" [60]: http://www.catonmat.net/c/79077?reply "Reply to comment by Steve Massey" [61]: http://www.gravatar.com/avatar/8abc07172863d7ca89c6c4d9524444cb.jpg?s=40 [62]: http://www.catonmat.net/c/45648 "Permanent link to the comment" [63]: http://www.catonmat.net/c/45648?reply "Reply to comment by Ed" [64]: http://www.gravatar.com/avatar/3f99cf9d8f05ba9c1c0af9eefd8a9a0b.jpg?s=40 [65]: http://www.catonmat.net/c/1903 "Permanent link to the comment" [66]: http://www.catonmat.net/c/1903?reply "Reply to comment by TheDude" [67]: http://www.catonmat.net/c/1904 "Permanent link to the comment" [68]: http://www.catonmat.net/c/1904?reply "Reply to comment by TheDude" [69]: http://www.gravatar.com/avatar/630838495ab6dd6c8cbbe5b161722dcd.jpg?s=40 [70]: http://www.catonmat.net/c/1905 "Permanent link to the comment" [71]: http://www.catonmat.net/c/1905?reply "Reply to comment by yitzle" [72]: http://www.gravatar.com/avatar/9055b6c1d07708555ec584d03c387f15.jpg?s=40 [73]: http://www.catonmat.net "http://www.catonmat.net" [74]: http://twitter.com/pkrumins "pkrumins on Twitter" [75]: http://www.catonmat.net/c/1906 "Permanent link to the comment" [76]: http://blog.jrock.us/articles/Useless%20use%20of%20%22useless%20use%22.pod [77]: http://www.catonmat.net/c/1906?reply "Reply to comment by Peter Krumins" [78]: http://www.gravatar.com/avatar/e29325a5834bc92221c691de949d69a4.jpg?s=40 [79]: http://www.darchis.be/eric/blog/ "http://www.darchis.be/eric/blog/" [80]: http://www.catonmat.net/c/1907 "Permanent link to the comment" [81]: http://www.catonmat.net/c/1907?reply "Reply to comment by Eric D" [82]: http://www.catonmat.net/c/1908 "Permanent link to the comment" [83]: http://www.catonmat.net/c/1908?reply "Reply to comment by Mark" [84]: http://www.gravatar.com/avatar/cb89fcda0d398c085071b2bf89468feb.jpg?s=40 [85]: http://mina.naguib.ca/ "http://mina.naguib.ca/" [86]: http://www.catonmat.net/c/1909 "Permanent link to the comment" [87]: http://www.catonmat.net/c/1909?reply "Reply to comment by Mina Naguib" [88]: http://www.gravatar.com/avatar/d641bb93da41dd75b5c863217e3601f2.jpg?s=40 [89]: http://www.catonmat.net/c/1910 "Permanent link to the comment" [90]: http://www.catonmat.net/c/1910?reply "Reply to comment by james" [91]: http://www.gravatar.com/avatar/aab1712a66580b63633ff0408255512b.jpg?s=40 [92]: http://www.catonmat.net/c/1911 "Permanent link to the comment" [93]: http://www.catonmat.net/c/1911?reply "Reply to comment by Tim" [94]: http://www.gravatar.com/avatar/17002274e73fb6e8ca4dea135785f3c6.jpg?s=40 [95]: http://www.catonmat.net/c/1912 "Permanent link to the comment" [96]: http://www.catonmat.net/c/1912?reply "Reply to comment by Roman" [97]: http://www.gravatar.com/avatar/67d03defc15fb5525179534ce55af419.jpg?s=40 [98]: http://www.catonmat.net/c/1913 "Permanent link to the comment" [99]: http://www.catonmat.net/c/1913?reply "Reply to comment by Galactic Dominator" [100]: http://www.gravatar.com/avatar/8516b728d67a333b4721e3c7d7c604bf.jpg?s=40 [101]: http://nerd.sh "http://nerd.sh" [102]: http://www.catonmat.net/c/1914 "Permanent link to the comment" [103]: http://www.catonmat.net/c/1914?reply "Reply to comment by olle" [104]: http://www.gravatar.com/avatar/c574ddb274c1704c7e0b154528c1d29d.jpg?s=40 [105]: http://www.catonmat.net/c/1915 "Permanent link to the comment" [106]: http://www.catonmat.net/c/1915?reply "Reply to comment by Tarrant" [107]: http://www.gravatar.com/avatar/50dfe97583e305e2b99384b93c13d296.jpg?s=40 [108]: http://www.catonmat.net/c/1916 "Permanent link to the comment" [109]: http://www.catonmat.net/c/1916?reply "Reply to comment by Jon Craton" [110]: http://www.gravatar.com/avatar/09dd57ac2fe90e0a8733e394b7046c99.jpg?s=40 [111]: http://www.catonmat.net/c/1917 "Permanent link to the comment" [112]: http://www.aerospacesoftware.com/ogg2mp3-howto.html [113]: http://www.catonmat.net/c/1917?reply "Reply to comment by Pat" [114]: http://www.gravatar.com/avatar/f73c96fee3cfb90d92c16a547c543d53.jpg?s=40 [115]: http://www.jerrywalsh.org "http://www.jerrywalsh.org" [116]: http://www.catonmat.net/c/1918 "Permanent link to the comment" [117]: http://www.catonmat.net/c/1918?reply "Reply to comment by Jerry Walsh" [118]: http://www.gravatar.com/avatar/287e5fbcc8139678e7dfeaabde1c3269.jpg?s=40 [119]: http://rebol.vlexo.net "http://rebol.vlexo.net" [120]: http://www.catonmat.net/c/1919 "Permanent link to the comment" [121]: http://www.catonmat.net/c/1919?reply "Reply to comment by Leon" [122]: http://www.gravatar.com/avatar/8218b2bfe3b134755128deccb2ba9b6c.jpg?s=40 [123]: http://www.catonmat.net/c/1920 "Permanent link to the comment" [124]: http://www.catonmat.net/c/1920?reply "Reply to comment by mourad" [125]: http://www.gravatar.com/avatar/cfa1b657bd6194f9da543e80ea012558.jpg?s=40 [126]: http://www.catonmat.net/c/1921 "Permanent link to the comment" [127]: http://www.catonmat.net/c/1921?reply "Reply to comment by Craig Hughes" [128]: http://www.gravatar.com/avatar/3ea4fc80edc34673d299ea9a17a97aa0.jpg?s=40 [129]: http://www.catonmat.net/c/1922 "Permanent link to the comment" [130]: http://www.catonmat.net/c/1922?reply "Reply to comment by Joeri" [131]: http://www.gravatar.com/avatar/1ee795acc4610118a38a44d17ab32eb6.jpg?s=40 [132]: http://www.catonmat.net/c/1923 "Permanent link to the comment" [133]: http://www.catonmat.net/c/1923?reply "Reply to comment by shah" [134]: http://www.gravatar.com/avatar/7322e558dae20f3625b72dd23597ddd8.jpg?s=40 [135]: http://n/a "http://n/a" [136]: http://www.catonmat.net/c/1924 "Permanent link to the comment" [137]: http://www.catonmat.net/c/1924?reply "Reply to comment by avar" [138]: http://www.gravatar.com/avatar/c51f532a209a64edc974c60ef62c4180.jpg?s=40 [139]: http://www.spmmf.com "http://www.spmmf.com" [140]: http://www.catonmat.net/c/1925 "Permanent link to the comment" [141]: http://www.catonmat.net/c/1925?reply "Reply to comment by MMF" [142]: http://www.gravatar.com/avatar/739df6e04ec29d1bd95cc491615df1c0.jpg?s=40 [143]: http://www.catonmat.net/c/1926 "Permanent link to the comment" [144]: http://www.catonmat.net/c/1926?reply "Reply to comment by Xezlec" [145]: http://www.gravatar.com/avatar/97c5f0d45825c0c1822031c34d8b4442.jpg?s=40 [146]: http://www.catonmat.net/c/1927 "Permanent link to the comment" [147]: http://www.catonmat.net/c/1927?reply "Reply to comment by Debty" [148]: http://www.gravatar.com/avatar/21fad00a5ab48e8ac96bcc3b6ec9dd8b.jpg?s=40 [149]: http://www.catonmat.net/c/1928 "Permanent link to the comment" [150]: http://www.catonmat.net/c/1928?reply "Reply to comment by argv" [151]: http://www.catonmat.net/c/1929 "Permanent link to the comment" [152]: http://www.catonmat.net/c/1929?reply "Reply to comment by Peter Krumins" [153]: http://www.catonmat.net/c/1930 "Permanent link to the comment" [154]: http://www.catonmat.net/c/1930?reply "Reply to comment by argv" [155]: http://www.catonmat.net/c/1931 "Permanent link to the comment" [156]: http://www.catonmat.net/c/1931?reply "Reply to comment by argv" [157]: http://www.catonmat.net/c/1932 "Permanent link to the comment" [158]: http://www.catonmat.net/c/1932?reply "Reply to comment by Peter Krumins" [159]: http://www.catonmat.net/c/1933 "Permanent link to the comment" [160]: http://www.catonmat.net/c/1933?reply "Reply to comment by argv" [161]: http://www.gravatar.com/avatar/dc5bc6c55dcb9824eea15e1d055bef75.jpg?s=40 [162]: http://twitter.com/pythonone "http://twitter.com/pythonone" [163]: http://www.catonmat.net/c/1934 "Permanent link to the comment" [164]: http://www.catonmat.net/c/1934?reply "Reply to comment by Abottleinfrontofme Frontallobotomy" [165]: http://www.catonmat.net/c/1935 "Permanent link to the comment" [166]: http://www.catonmat.net/c/1935?reply "Reply to comment by Abottleinfrontofme Frontallobotomy" [167]: http://www.gravatar.com/avatar/df6e9e9da3cd7032f121a1941792e05e.jpg?s=40 [168]: http://www.sanalikaoyna.org "http://www.sanalikaoyna.org" [169]: http://www.catonmat.net/c/1936 "Permanent link to the comment" [170]: http://www.catonmat.net/c/1936?reply "Reply to comment by sanalika" [171]: http://www.catonmat.net/c/1937 "Permanent link to the comment" [172]: http://www.catonmat.net/c/1937?reply "Reply to comment by argv" [173]: http://www.gravatar.com/avatar/e34bdd423c91ca4b138cc62d0c664212.jpg?s=40 [174]: http://www.geeksww.com/ "http://www.geeksww.com/" [175]: http://www.catonmat.net/c/1938 "Permanent link to the comment" [176]: http://www.catonmat.net/c/1938?reply "Reply to comment by rick" [177]: http://www.catonmat.net/static/img/nogravatar.gif [178]: http://www.catonmat.net/c/5417 "Permanent link to the comment" [179]: http://www.catonmat.net/c/5417?reply "Reply to comment by langagemachine" [180]: http://www.catonmat.net/c/14981 "Permanent link to the comment" [181]: http://www.catonmat.net/c/14981?reply "Reply to comment by alex" [182]: http://www.gravatar.com/avatar/8ba5f8d1fd128c235860a1847f8356c3.jpg?s=40 [183]: http://www.catonmat.net/c/78510 "Permanent link to the comment" [184]: http://www.catonmat.net/c/78510?reply "Reply to comment by Jonatan Jönsson" [185]: http://www.gravatar.com/avatar/1c0439817e4f950db40f425724e73710.jpg?s=40 [186]: http://kstep.me "http://kstep.me" [187]: http://twitter.com/kstepme "kstepme on Twitter" [188]: http://www.catonmat.net/c/41932 "Permanent link to the comment" [189]: http://www.catonmat.net/c/41932?reply "Reply to comment by Konstantin" [190]: http://www.gravatar.com/avatar/7716c8eed0fe70fedc3c3cb1043b7e98.jpg?s=40 [191]: http://www.templeos.org "http://www.templeos.org" [192]: http://twitter.com/TempleOS "TempleOS on Twitter" [193]: http://www.catonmat.net/c/45640 "Permanent link to the comment" [194]: http://www.catonmat.net/c/45640?reply "Reply to comment by Terry A. Davis" [195]: http://www.templeos.,org "http://www.templeos.,org" [196]: http://www.catonmat.net/c/45641 "Permanent link to the comment" [197]: http://www.catonmat.net/c/45641?reply "Reply to comment by Terry A. Davis" [198]: http://www.gravatar.com/avatar/267f8a0ecfb327eacfc3e3c27c20a337.jpg?s=40 [199]: http://www.catonmat.net/c/45646 "Permanent link to the comment" [200]: http://www.catonmat.net/c/45646?reply "Reply to comment by null" [201]: http://www.catonmat.net/c/45647 "Permanent link to the comment" [202]: http://www.catonmat.net/c/45647?reply "Reply to comment by null" [203]: http://www.catonmat.net/c/78509 "Permanent link to the comment" [204]: http://www.catonmat.net/c/78509?reply "Reply to comment by Jonatan Jönsson" [205]: http://www.catonmat.net# "Why do I need your email?" [206]: http://www.catonmat.net# [207]: http://www.catonmat.net/static/img/peteris-krumins-small.jpg [208]: http://www.catonmat.net/about/ "About Peter Krumins" [209]: http://www.catonmat.net/static/img/peter-catonmat-net.gif [210]: http://www.twitter.com/pkrumins [211]: http://www.catonmat.net/static/img/facebook-16x16.gif [212]: http://www.facebook.com/pkrumins [213]: http://www.catonmat.net/static/img/plurk-16x16.gif [214]: http://www.plurk.com/pkrumins [215]: http://www.catonmat.net/static/img/more-10x10.gif [216]: http://www.catonmat.net/static/img/github-16x16.gif [217]: http://www.github.com/pkrumins [218]: http://www.catonmat.net/static/img/linkedin-16x16.gif [219]: http://www.linkedin.com/in/pkrumins [220]: http://www.catonmat.net/static/img/friendfeed-16x16.gif [221]: http://www.friendfeed.com/pkrumins [222]: http://www.catonmat.net/static/img/google-plus-16x16.png [223]: https://plus.google.com/102155999275405024037 [224]: http://www.catonmat.net/static/img/rss-feed-16x16.png [225]: http://www.catonmat.net/images/feedcounter-crontab.gif [226]: http://feeds2.feedburner.com/catonmat "Catonmat RSS Feed" [227]: http://www.catonmat.net/what-is-rss/ "What is an RSS feed?" [228]: http://feedburner.google.com [229]: http://www.catonmat.net/blog/busy-beaver/ [230]: http://www.catonmat.net/blog/on-functors/ [231]: http://www.catonmat.net/blog/recursive-regular-expressions/ [232]: http://www.catonmat.net/archive [233]: http://www.catonmat.net/static/img/amazon-16x16.gif [234]: http://www.amazon.com/registry/wishlist/QDKYO6OQUU4O?reveal=unpurchased&filter=all&sort=priority&layout=standard [235]: http://www.catonmat.net/blog/awk-book/ "Awk Programming Book" [236]: http://www.catonmat.net/blog/sed-book/ "Sed Programming Book" [237]: http://www.catonmat.net/blog/perl-book/ "Perl Programming Book" [238]: http://freescienceonline.blogspot.com [239]: http://www.freesciencelectures.com [240]: http://www.catonmat.net/blog/top-ten-one-liners-from-commandlinefu-explained/ "Read "Top Ten One-Liners from CommandLineFu Explained" (has been read 1,264,637 times)" [241]: http://www.catonmat.net/blog/linux-socks5-proxy/ "Read "Turn any Linux computer into SOCKS5 proxy in one command" (has been read 1,259,552 times)" [242]: http://www.catonmat.net/blog/my-job-interview-at-google/ "Read "My Job Interview at Google" (has been read 1,214,048 times)" [243]: http://www.catonmat.net/blog/sed-one-liners-explained-part-one/ "Read "Sed One-Liners Explained, Part I: File Spacing, Numbering and Text Conversion and Substitution" (has been read 1,089,066 times)" [244]: http://www.catonmat.net/blog/mit-introduction-to-algorithms-part-one/ "Read "MIT's Introduction to Algorithms, Lectures 1 and 2: Analysis of Algorithms" (has been read 956,913 times)" [245]: http://www.catonmat.net/http-proxy-in-nodejs/ "Read "A HTTP Proxy Server in 20 Lines of node.js Code" (has been read 914,888 times)" [246]: http://www.catonmat.net/blog/awk-one-liners-explained-part-one/ "Read "Awk One-Liners Explained, Part I: File Spacing, Numbering and Calculations" (has been read 820,159 times)" [247]: http://www.catonmat.net/blog/low-level-bit-hacks-you-absolutely-must-know/ "Read "Low Level Bit Hacks You Absolutely Must Know" (has been read 815,323 times)" [248]: http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line-history/ "Read "The Definitive Guide to Bash Command Line History" (has been read 781,136 times)" [249]: http://www.catonmat.net/blog/bash-vi-editing-mode-cheat-sheet/ "Read "Working Productively in Bash's Vi Command Line Editing Mode (with Cheat Sheet)" (has been read 691,978 times)" [250]: http://www.catonmat.net/archive?sorted_by=views "Top catonmat articles" [251]: http://www.catonmat.net/download/perl1line.txt "Download "perl1line.txt"" [252]: http://www.catonmat.net/download/bash-redirections-cheat-sheet.pdf "Download "bash redirections cheat sheet (.pdf)"" [253]: http://www.catonmat.net/download/bash-history-cheat-sheet.pdf "Download "bash history cheat sheet (.pdf)"" [254]: http://www.catonmat.net/download/awk.cheat.sheet.pdf "Download "awk cheat sheet (.pdf)"" [255]: http://www.catonmat.net/download/sed.stream.editor.cheat.sheet.pdf "Download "sed stream editor cheat sheet (.pdf)"" [256]: http://www.catonmat.net/download/screen.cheat.sheet.pdf "Download "screen cheat sheet (.pdf)"" [257]: http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf "Download "bash vi editing mode cheat sheet (.pdf)"" [258]: http://www.catonmat.net/download/perl.pack.unpack.printf.cheat.sheet.pdf "Download "perl's pack/unpack and printf cheat sheet (.pdf)"" [259]: http://www.catonmat.net/download/awk.cheat.sheet.txt "Download "awk cheat sheet (.txt)"" [260]: http://www.catonmat.net/download/perl.predefined.variables.pdf "Download "perl's special variable cheat sheet (.pdf)"" [261]: http://www.catonmat.net/downloads "All catonmat downloads" [262]: http://www.catonmat.net/blog/browserling-top-40k-website/ "Read "Browserling is now a top 40k website in the world" (was published on February 19, 2018)" [263]: http://www.catonmat.net/blog/knuth-vs-mcilroy/ "Read "Knuth vs McIlroy (Epic Computer Science Battles)" (was published on February 06, 2018)" [264]: http://www.catonmat.net/blog/1000-days-of-commits/ "Read "1000 days of commits" (was published on February 04, 2018)" [265]: http://www.catonmat.net/blog/cameroonians-restore-internet-access/ "Read "Browserling has helped Cameroonians restore Internet freedom" (was published on January 29, 2018)" [266]: http://www.catonmat.net/blog/browserling-comic-10-formats/ "Read "Why does Browserling's comic have 10 different formats?" (was published on January 27, 2018)" [267]: http://www.catonmat.net/blog/online-binary-tools/ "Read "Eighth site in online tools network: onlineBINARYtools.com" (was published on January 25, 2018)" [268]: http://www.catonmat.net/blog/browserling-domain-typos/ "Read "How much traffic do domain typos get?" (was published on January 23, 2018)" [269]: http://www.catonmat.net/blog/larry-wall-comic/ "Read "Larry Wall illustrated" (was published on January 05, 2018)" [270]: http://www.catonmat.net/blog/online-yaml-tools/ "Read "Seventh site in online tools network: onlineYAMLtools.com" (was published on January 03, 2018)" [271]: http://www.catonmat.net/blog/merry-browsery-christmas/ "Read "Merry browsery Christmas and Happy browsery New Year!" (was published on December 23, 2017)" [272]: http://www.catonmat.net/archive "All catonmat articles" [273]: http://www.catonmat.net/category/awk-programming "Awk Programming: Awk is a very important Unix programming language for manipulating text very quickly. It's included in every Unix and Linux distribution and you should know it inside out. Here are my tutorials about it." [274]: http://www.catonmat.net/category/browserling "Browserling: Articles about my and James Halliday's startup - Browserling - live interactive web-based cross-browser testing! (Earlier called StackVM, which brings virtual machines to the web.) " [275]: http://www.catonmat.net/category/cheat-sheets "Cheat Sheets: All kinds of programming and computer science cheat sheets - vt100/ansi cheat sheet, shell emacs editing mode cheat sheet, iptables cheat sheets and many many others." [276]: http://www.catonmat.net/category/computer-science "Computer Science: I love computer science." [277]: http://www.catonmat.net/category/hackers-approach "Hacker's Approach: Using the hacker's approach one can develop cool software in a matter of hours without really going into details how it all works but using the right pieces and putting them together. Also a real hacker would be able to do the right things with the wrong tools." [278]: http://www.catonmat.net/category/howto "Howto: Howto guides - howto download youtube videos, how to upload them, how to be a real hacker, how to become immortal, etc ;)" [279]: http://www.catonmat.net/category/ideas-for-later "Ideas for Later: Ideas that I want to build at some time later." [280]: http://www.catonmat.net/category/interviews "Interviews: Interviews with me." [281]: http://www.catonmat.net/category/introduction-to-algorithms "Introduction to Algorithms: Analysis of MIT's "Introduction to Algorithms" video lectures. Contains embedded videos with timestamped list of topics and scanned lecture notes." [282]: http://www.catonmat.net/category/linear-algebra "Linear Algebra: Analysis of MIT's "Linear Algebra" course. Contains embedded videos with timestamped list of topics and scanned lecture notes." [283]: http://www.catonmat.net/category/mathematics "Mathematics: A good computer scientist has to know mathematics." [284]: http://www.catonmat.net/category/misc "Misc: Articles that don't fit in other categories. They include interviews and blogging related stuff." [285]: http://www.catonmat.net/category/musical-geek-friday "Musical Geek Friday: Really funny and geeky songs I found in my mp3 collection." [286]: http://www.catonmat.net/category/my-favorite-books "My Favorite Books: My favorite programming books, software development books, coding books, physics books, chemistry books, mathematics books, and science books." [287]: http://www.catonmat.net/category/nodejs-modules "Node.js Modules: Here is a list of node.js modules you should know about. We use these at Browserling and Testling and it's great!" [288]: http://www.catonmat.net/category/perl-programming "Perl Programming: Perl is my favorite and one of the hackiest languages ever invented. I get things done with quickly. Here are some of tutorials that I wrote about it." [289]: http://www.catonmat.net/category/programming "Programming: I love programming!" [290]: http://www.catonmat.net/category/projects "Projects: All the various projects that I have done, they include digpicz, reddit media, reddit river, and others." [291]: http://www.catonmat.net/category/security "Security: Computer security is a field close to my heart." [292]: http://www.catonmat.net/category/the-new-catonmat "The New Catonmat: Everything about the new catonmat website." [293]: http://www.catonmat.net/category/tools "Tools: Tools - small programs that do great things. Actually this category is not very useful, I am going to merge it with some other category soon." [294]: http://www.catonmat.net/category/unix-shell "Unix Shell: This category contains various articles on how to work in the Unix shell." [295]: http://www.catonmat.net/category/video-lectures "Video Lectures: I love watching video lectures and tech talks. Here are some of my favorite videos." [296]: http://www.catonmat.net/category/visual-math-friday "Visual Math Friday: I have collected hundreds of visual math proofs. In these articles I explain them and prove their correctness." [297]: http://www.catonmat.net/categories "Detailed catonmat category information" [298]: http://www.catonmat.net/archive/2018/02 "All articles written in February, 2018" [299]: http://www.catonmat.net/archive/2018/01 "All articles written in January, 2018" [300]: http://www.catonmat.net/archive/2017/12 "All articles written in December, 2017" [301]: http://www.catonmat.net/archive/2017/11 "All articles written in November, 2017" [302]: http://www.catonmat.net/archive/2017/10 "All articles written in October, 2017" [303]: http://www.catonmat.net/archive/2017/09 "All articles written in September, 2017" [304]: http://www.catonmat.net/archive/2017/08 "All articles written in August, 2017" [305]: http://www.catonmat.net/archive/2017/07 "All articles written in July, 2017" [306]: http://www.catonmat.net/archive/2017/06 "All articles written in June, 2017" [307]: http://www.catonmat.net/archive/2017/05 "All articles written in May, 2017" [308]: http://www.catonmat.net/archive/2017/04 "All articles written in April, 2017" [309]: http://www.catonmat.net/archive/2017/03 "All articles written in March, 2017" [310]: http://www.catonmat.net/archive/2017/02 "All articles written in February, 2017" [311]: http://www.catonmat.net/archive/2017/01 "All articles written in January, 2017" [312]: http://www.catonmat.net/archive/2016/12 "All articles written in December, 2016" [313]: http://www.catonmat.net/archive/2016/11 "All articles written in November, 2016" [314]: http://www.catonmat.net/archive/2016/10 "All articles written in October, 2016" [315]: http://www.catonmat.net/archive/2016/09 "All articles written in September, 2016" [316]: http://www.catonmat.net/archive/2016/08 "All articles written in August, 2016" [317]: http://www.catonmat.net/archive/2016/07 "All articles written in July, 2016" [318]: http://www.catonmat.net/archive/2016/06 "All articles written in June, 2016" [319]: http://www.catonmat.net/archive/2016/05 "All articles written in May, 2016" [320]: http://www.catonmat.net/archive/2016/04 "All articles written in April, 2016" [321]: http://www.catonmat.net/archive/2016/03 "All articles written in March, 2016" [322]: http://www.catonmat.net/archive/2016/02 "All articles written in February, 2016" [323]: http://www.catonmat.net/archive/2016/01 "All articles written in January, 2016" [324]: http://www.catonmat.net/archive/2015/12 "All articles written in December, 2015" [325]: http://www.catonmat.net/archive/2015/11 "All articles written in November, 2015" [326]: http://www.catonmat.net/archive/2015/10 "All articles written in October, 2015" [327]: http://www.catonmat.net/archive/2015/09 "All articles written in September, 2015" [328]: http://www.catonmat.net/archive/2015/08 "All articles written in August, 2015" [329]: http://www.catonmat.net/archive/2015/07 "All articles written in July, 2015" [330]: http://www.catonmat.net/archive/2015/06 "All articles written in June, 2015" [331]: http://www.catonmat.net/archive/2015/05 "All articles written in May, 2015" [332]: http://www.catonmat.net/archive/2015/04 "All articles written in April, 2015" [333]: http://www.catonmat.net/archive/2015/03 "All articles written in March, 2015" [334]: http://www.catonmat.net/archive/2015/02 "All articles written in February, 2015" [335]: http://www.catonmat.net/archive/2015/01 "All articles written in January, 2015" [336]: http://www.catonmat.net/archive/2014/12 "All articles written in December, 2014" [337]: http://www.catonmat.net/archive/2014/11 "All articles written in November, 2014" [338]: http://www.catonmat.net/archive/2014/10 "All articles written in October, 2014" [339]: http://www.catonmat.net/archive/2014/09 "All articles written in September, 2014" [340]: http://www.catonmat.net/archive/2014/08 "All articles written in August, 2014" [341]: http://www.catonmat.net/archive/2014/07 "All articles written in July, 2014" [342]: http://www.catonmat.net/archive/2014/06 "All articles written in June, 2014" [343]: http://www.catonmat.net/archive/2014/05 "All articles written in May, 2014" [344]: http://www.catonmat.net/archive/2014/04 "All articles written in April, 2014" [345]: http://www.catonmat.net/archive/2014/03 "All articles written in March, 2014" [346]: http://www.catonmat.net/archive/2014/02 "All articles written in February, 2014" [347]: http://www.catonmat.net/archive/2014/01 "All articles written in January, 2014" [348]: http://www.catonmat.net/archive/2013/12 "All articles written in December, 2013" [349]: http://www.catonmat.net/archive/2013/11 "All articles written in November, 2013" [350]: http://www.catonmat.net/archive/2013/10 "All articles written in October, 2013" [351]: http://www.catonmat.net/archive/2013/09 "All articles written in September, 2013" [352]: http://www.catonmat.net/archive/2013/08 "All articles written in August, 2013" [353]: http://www.catonmat.net/archive/2013/07 "All articles written in July, 2013" [354]: http://www.catonmat.net/archive/2013/06 "All articles written in June, 2013" [355]: http://www.catonmat.net/archive/2013/05 "All articles written in May, 2013" [356]: http://www.catonmat.net/archive/2013/04 "All articles written in April, 2013" [357]: http://www.catonmat.net/archive/2013/03 "All articles written in March, 2013" [358]: http://www.catonmat.net/archive/2013/02 "All articles written in February, 2013" [359]: http://www.catonmat.net/archive/2013/01 "All articles written in January, 2013" [360]: http://www.catonmat.net/archive/2012/12 "All articles written in December, 2012" [361]: http://www.catonmat.net/archive/2012/11 "All articles written in November, 2012" [362]: http://www.catonmat.net/archive/2012/10 "All articles written in October, 2012" [363]: http://www.catonmat.net/archive/2012/09 "All articles written in September, 2012" [364]: http://www.catonmat.net/archive/2012/08 "All articles written in August, 2012" [365]: http://www.catonmat.net/archive/2012/07 "All articles written in July, 2012" [366]: http://www.catonmat.net/archive/2012/06 "All articles written in June, 2012" [367]: http://www.catonmat.net/archive/2012/05 "All articles written in May, 2012" [368]: http://www.catonmat.net/archive/2012/04 "All articles written in April, 2012" [369]: http://www.catonmat.net/archive/2012/03 "All articles written in March, 2012" [370]: http://www.catonmat.net/archive/2012/02 "All articles written in February, 2012" [371]: http://www.catonmat.net/archive/2012/01 "All articles written in January, 2012" [372]: http://www.catonmat.net/archive/2011/12 "All articles written in December, 2011" [373]: http://www.catonmat.net/archive/2011/11 "All articles written in November, 2011" [374]: http://www.catonmat.net/archive/2011/10 "All articles written in October, 2011" [375]: http://www.catonmat.net/archive/2011/09 "All articles written in September, 2011" [376]: http://www.catonmat.net/archive/2011/08 "All articles written in August, 2011" [377]: http://www.catonmat.net/archive/2011/07 "All articles written in July, 2011" [378]: http://www.catonmat.net/archive/2011/06 "All articles written in June, 2011" [379]: http://www.catonmat.net/archive/2011/05 "All articles written in May, 2011" [380]: http://www.catonmat.net/archive/2011/04 "All articles written in April, 2011" [381]: http://www.catonmat.net/archive/2011/03 "All articles written in March, 2011" [382]: http://www.catonmat.net/archive/2011/02 "All articles written in February, 2011" [383]: http://www.catonmat.net/archive/2011/01 "All articles written in January, 2011" [384]: http://www.catonmat.net/archive/2010/12 "All articles written in December, 2010" [385]: http://www.catonmat.net/archive/2010/11 "All articles written in November, 2010" [386]: http://www.catonmat.net/archive/2010/10 "All articles written in October, 2010" [387]: http://www.catonmat.net/archive/2010/09 "All articles written in September, 2010" [388]: http://www.catonmat.net/archive/2010/08 "All articles written in August, 2010" [389]: http://www.catonmat.net/archive/2010/07 "All articles written in July, 2010" [390]: http://www.catonmat.net/archive/2010/06 "All articles written in June, 2010" [391]: http://www.catonmat.net/archive/2010/05 "All articles written in May, 2010" [392]: http://www.catonmat.net/archive/2010/04 "All articles written in April, 2010" [393]: http://www.catonmat.net/archive/2010/03 "All articles written in March, 2010" [394]: http://www.catonmat.net/archive/2010/02 "All articles written in February, 2010" [395]: http://www.catonmat.net/archive/2010/01 "All articles written in January, 2010" [396]: http://www.catonmat.net/archive/2009/12 "All articles written in December, 2009" [397]: http://www.catonmat.net/archive/2009/11 "All articles written in November, 2009" [398]: http://www.catonmat.net/archive/2009/10 "All articles written in October, 2009" [399]: http://www.catonmat.net/archive/2009/09 "All articles written in September, 2009" [400]: http://www.catonmat.net/archive/2009/08 "All articles written in August, 2009" [401]: http://www.catonmat.net/archive/2009/07 "All articles written in July, 2009" [402]: http://www.catonmat.net/archive/2009/06 "All articles written in June, 2009" [403]: http://www.catonmat.net/archive/2009/05 "All articles written in May, 2009" [404]: http://www.catonmat.net/archive/2009/04 "All articles written in April, 2009" [405]: http://www.catonmat.net/archive/2009/03 "All articles written in March, 2009" [406]: http://www.catonmat.net/archive/2009/02 "All articles written in February, 2009" [407]: http://www.catonmat.net/archive/2009/01 "All articles written in January, 2009" [408]: http://www.catonmat.net/archive/2008/12 "All articles written in December, 2008" [409]: http://www.catonmat.net/archive/2008/11 "All articles written in November, 2008" [410]: http://www.catonmat.net/archive/2008/10 "All articles written in October, 2008" [411]: http://www.catonmat.net/archive/2008/09 "All articles written in September, 2008" [412]: http://www.catonmat.net/archive/2008/08 "All articles written in August, 2008" [413]: http://www.catonmat.net/archive/2008/07 "All articles written in July, 2008" [414]: http://www.catonmat.net/archive/2008/06 "All articles written in June, 2008" [415]: http://www.catonmat.net/archive/2008/05 "All articles written in May, 2008" [416]: http://www.catonmat.net/archive/2008/04 "All articles written in April, 2008" [417]: http://www.catonmat.net/archive/2008/03 "All articles written in March, 2008" [418]: http://www.catonmat.net/archive/2008/02 "All articles written in February, 2008" [419]: http://www.catonmat.net/archive/2008/01 "All articles written in January, 2008" [420]: http://www.catonmat.net/archive/2007/12 "All articles written in December, 2007" [421]: http://www.catonmat.net/archive/2007/11 "All articles written in November, 2007" [422]: http://www.catonmat.net/archive/2007/10 "All articles written in October, 2007" [423]: http://www.catonmat.net/archive/2007/09 "All articles written in September, 2007" [424]: http://www.catonmat.net/archive/2007/08 "All articles written in August, 2007" [425]: http://www.catonmat.net/archive/2007/07 "All articles written in July, 2007" [426]: http://www.catonmat.net/static/img/jelly-stains.gif [427]: http://www.catonmat.net/advertise [428]: http://c.statcounter.com/3189873/0/dc7255a7/1/ [429]: https://www.facebook.com/tr?id=1256130351091056&ev=PageView&noscript=1