Oplossingen vraagstukken

In het document Netwerk vraagstukken worden 5 vragen over het netwerk gesteld. Deze vragen proberen we hier te beantwoorden.

Inetd

Om dit goed werkend te krijgen schrijven we het volgende shell script:
#!/bin/sh
#
PROG=`basename $0`
#
echo -n 'Naam> '
read NAAM
date >>/var/tmp/$PROG
echo $NAAM >>/var/tmp/$PROG

Vervolgens nemen we in /etc/services de volgende regel op:
askname 9999/tcp

Daarna kunnen we het shellscript via inetd aanroepen met:
askname stream tcp nowait root /tmp/askname askname

De berkley r protocollen

Eigenlijk een triviale opgave. Zorg er voor dat het .rhosts file met de goede permisies aanwezig is en dat de host goed geresolved kan worden. Test dit met behulp van rsh <system> hostname.

Daarna werk tar cf <system>:/tmp/test.tar /tmp gewoon.

ssh

Als je weet dat telnet poort 23 gebruikt en je begrijpt de syntax van ssh dan heb je de oplossing eigenlijk al. Dat is namelijk:
ssh -R 2023:localhost:23

Sniffers

Hier kan ik weinig meer zeggen dan de onderstaande screendump. Screenshot off ethereal

Daemons

Dit is een lastige opgave waarbij je eigenlijk een klein beetje moet begrijpen wat de systemcalls met betrekking tot de netwerk laag doen.

Ik heb diverse kleine programmatjes geschreven om dit onder de knie te krijgen. Hier volgt een klein voorbeeld in perl.

#!/usr/bin/perl -w
#
# Marcel Nijenhof
# Peter Zuidhove 79
# 2717 TN Zoetermeer
# Tel: 079 3526046
# marceln@xirion.nl
#
# Beschrijving:
#
# $Header$
#
# $Log$
#
#################################################################################
use Socket;
use IO::Handle;
#
# Welke poort gebruiken we.
#
my ($proto) = 6;
my ($port) = 1111;
#
# main
#
socket(Server, PF_INET, SOCK_STREAM, $proto) or
	die "Can't open socket: $!";
setsockopt(Server, SOL_SOCKET, SO_REUSEADDR, pack("l", 1)) or
	die "Can't set socket options: $!\n";
bind(Server, sockaddr_in($port, INADDR_ANY)) or
	die "Can't bind socket: $!\n";
listen(Server,SOMAXCONN) or
	die "Can't listen: $!\n";
Client->autoflush(1);
print "W-daemon: Waiting for connection\n";
while ($paddr = accept (Client, Server)) {
	my ($port,$iaddr) = sockaddr_in($paddr);
	my ($name) = gethostbyaddr($iaddr,AF_INET);
	print "W-daemon: Conection from $name\:$port\n";
	print Client "W-daemon?\r\n";
	while (defined ($line = <Client>) & ! ($line =~ /^QUIT/))  {
		print "W-deaemon: Read: $line";
		print Client "W-daemon?\n";
	}
	close (Client);
}

Zodra dit programa loopt kun je naar poort 1111 connecten en zie je de logging op het scherm waar je dit programma opgestart hebt. Een van de problemen van deze oplossing is dat dit programma niet multithreaded is. Het comuniceert slechts met een gebruiker tegelijk.