What?
It's a little program to jam a door open. Well, metaphorically speaking, of course. It's a TCP door and it just props it open.

Why?
I was helping a co-worker on a problem with SYN packets and a lack of available high ports when we tried to recreate the problem. As it turns out, I couldn't find anything to just open a TCP conversation without sending a FIN or an RST packet or transfer data or whatever. Here is my "door-stopper" solution to that problem. I do want to ask, though: Seriously, who the Hell runs out of available high ports to use? *shrugs*

How?
Using perl (the only programming language I can butcher enough to make work) and it's ability to utilize network sockets, I have made a program to start a TCP conversation (SYN/SYN-ACK/ACK) with the input variables of Target IP, Destination Port and Source Port.

Updates
Version 0.5 - IPv6 Support and a Mini-Man Page added

Where?
Here - MD5 Checksum: 8b78d4cf1d86ca2711d02db96f1e17ef

Installation
- First, go to www.perl.org and install perl if you haven't already got it. Most modern UNIX systems will have perl installed already. If you are using Windows, get the ActivePerl binaries and install it.
- Got perl? Good. Click on the link above.
- Copy everything into your OS buffer (CTRL+C usually does this).
- Create/Touch/vi/emacs a new file and paste into it.
- Save the file as "grass.pl"
- UNIX users - chmod ugo+x grass.pl

Usage
grass.pl -t [IP_to_connect_to] -p [DST_Port] -s [SRC_Port] (-x[4][6]) (-man)

^C/SIGINT will send a FIN packet and close the connection.

README and FAQ
- First off, the code is (kinda') well commented. You can find a lot of answers in the comments.
- If you want to actually send anything across the socket, use the pre-defined $gigo variable. For instance, if you want to send an SMTP HELO command, put the full command into the $gigo variable.
- Yes, $gigo is for Garbage In, Garbage Out.
- What the Hell is this: IO::Socket::INET=GLOB(0x818f284)? SYN-ACK from the server. It's all good.


Return to $2600 Index