Hallo roboman,

für welchen zweck willst du einen Proxy bauen?

Die Kommunikation zwischen einem Client und einem Proxy ist stinknormale Socketkommunikation zwischen zwei Programmen. Lediglich der Proxy macht dann noch etwas mehr mit den Daten...
Was im Falle von HTTP und HTTPS der Proxy können muss ist in RFC1945 und RFC2616 beschrieben. Aber das ist Anwendungslogig.

Einen einfachen Port Forwarder (nichts anderes ist ein Proxy im Grunde...) kann man sich auch mit Putty bauen (unter Linux gibt es da auch noch andere Lösungen).

Zum identifizieren von Clients:
Willst du herausfinden, welcher Client gerade mit dem Ziel redet oder willst du eine Identifikation verhindern?

Code:
[Client]---
           +-----[Router]-----[Ziel]
[Client]---
Clients hinter einem nicht maskierden Router können anhand ihrer eigenen IP Adresse ermittelt werden, da diese vom Router einfach weitergeleitet werden.

Clients hinter einem maskierden Router [aka NAT oder Masquerading] kann man in der Regel nicht identifizieren. Es sei den man analysiert den Inhalt des Datenstroms und findet Spuren des orginal Rechners.
Der Router speichert hierzu sich eine Session bestehend aus Quell-IP, Quell-Port, Ziel-IP und Ziel-Port und ersetzt die Quell-Adresse und Port direkt im Header des IP Pakets durch seine eigenen Adress-Daten und sendet diese dann an das Ziel. Dieses sendet dann die Daten an den Router zurück, der jetzt einfach wieder seine IP Adresse durch die des CLients austauscht und die Daten dann einfach an den Client weiterschickt.

Wer gerade mit wem auf welchem Port spricht kann man sehr schön unter Windows mit "netstat -a" unter Linux mit mit "netstat -l" anschauen.

Mit WireShark oder tcpdump kann man sich den gesamten TCP/IP Dialog auf Paketebene sehr übersichtlich anschauen. Das ist auf Routern und Proxyservern sehr Aufschlußreich (wenn nicht gerade viel los ist).