Archive for the ‘Programming’ Category

Using BASH for network socket operation

Tuesday, June 8th, 2010 by BEni

In order to solve a programming assignment (send a “TEST” to an UDP service and readout the result [beeing "success"]) i looked into socket programming with the BASH command shell.

Here is the code:

# configuration
HOST="127.0.0.1"
PORT="1337"

# define functions
socksend ()
{
	SENDME="$1"
	echo "sending: $SENDME"
	echo -ne "$SENDME" >&5 &
}

sockread ()
{
	LENGTH="$1"
	RETURN=`dd bs=$1 count=1 <&5 2> /dev/null`
}

echo "trying to open socket"
# try to connect
if ! exec 5<> /dev/udp/$HOST/$PORT; then
  echo "`basename $0`: unable to connect to $HOST:$PORT"
  exit 1
fi
echo "socket is open"

# send request
socksend "TEST"

# read 7 bytes for "success"
sockread 7
echo "RETURN: $RETURN"

The procedure is fairly easy:
- create a filedescriptor (using number 5 because 0,1,2 are for system stdin/stdout/stderr, so i am on the safe side) and link it to the special device /dev/udp (/dev/tcp for tcp connections).
- read/write to the fd

Attention: your bash must be compiled with this feature, otherwise there wont be any /dev/udp or /dev/tcp devices.

My post should answer the question posted here:

http://www.linuxquestions.org/questions/programming-9/writing-to-and-reading-from-a-socket-from-bash-script-794812/

Also, i stumbled across those pages which where quite helpful for getting started:

http://blogmag.net/blog/read/49/Network_programing_with_bash

http://thesmithfam.org/blog/2006/05/23/bash-socket-programming-with-devtcp-2/

[PHP] Small usercounter

Tuesday, August 19th, 2008 by BEni

So there was a contest (over at #php.de on quakenet) to write a small PHP-Counter with graphical output, my contribution:


<?php
session_start();touch($f=ip2long($_SERVER['REMOTE_ADDR']),$t=time(),$m=’r');
if((@!$_SESSION[$d=':']&&@!$_COOKIE[$d])){setcookie($d,$_SESSION[$d]=$p=3600,$t+$p);
if(($fgets(fopen($f,$m)))<$t-$p){fputs(fopen($f,’w'),$t); touch($f*$t);}}ImageString($o=ImageCreateTrueColor(99,9),1,2,1,(count(glob(’*'))-1),65535);
header(’Content-Type:image/png’);ImagePNG($o);
?>