Napisałem program zachowujący się jak gateway pośredniczące między moim komputerem, a prawdziwą bramką. Jego docelowym przeznaczeniem ma być zwiększenie numerów IP, z których będę mógł jednocześnie korzystać.

Jak na razie, używam do tego celu dziesięciu serwerów proxy działających pod kontrolą dziesięciu systemów Windows 95, uruchomionych w Virtual PC. W specjalnym programie pasywnie monitorującym aktywność sieci, szukam nieaktywnego komputera, od którego porzyczam sobie adres IP, a raczej MAC, kliknięciem wpisuję go do pliku .vmc, poczym uruchamiam win95 pod nowym adresem IP.
Problemem tutaj jest ogromna ilość pamięci potrzebna na takiego win95 - 32MB na system, drugie tyle pożera Virtual PC na jakieś tajemnicze cele.
Mając 1GB pamięci RAM, mogę uruchomić od ośmiu do dziesięciu takich systemów, zależnie jak długo komputer jest uruchomiony.

Więc wymyśliłem że stworzę lokalne gateway, które na podstawie portu żródłowego pakietu TCP podmieni MAC i IP w pakiecie, podszywając się pod inny komputer z sieci, a w przyszłości umożliwi dostęp do sieci komputerom które serwisuję, bez spofowania MAC'a.
Lokalna bramka działa wyśmienicie, zwyczajny socket zbindowany na odpowiednim porcie w sumie działa jakby był zbindowany na innym adapterze sieciowym. Ma też ograniczenie - jedno połączenie z jednego portu, no coż, każdy protokół wysokiej warstwy nakłada ograniczenia.
Moje gateway odpowiada na zapytanie ARP oraz ECHO, nawet przeglądanie stron i pobranie pliku poprzez nie odbywa się bezbłędnie.

Problemem jest routing - nie mam bezpośrednigo dostępu do własnego programu, ping pokazuje że pakiet z mojego komputera odbija się od jakiegoś routera by trafić do gateway na moim komputerze.
Zmiana numeru IP bramki na lokalny (127.0.0.2) nie pomaga, a nawet blokuje ruch sieciowy, nie pozwalając na dodanie takiego gateway do tabeli routingu (route add).

Do odbioru i wysyłania pakietów użyłem sterownika ndisprot z DDK, oczywiście po drobnych przeróbkach. Gateway ma programowo ustawione IP na 1.1.1.1, MAC 111111:11, wszystko działa w usermode, tylko nie wiem jak wysłać pakiet pod ten adres (z komputera na którym gateway jest uruchomione) by nie wydostał się on do sieci. Jak już wspomniałem - ping krązy po sieci by dostarczyć pakiet wysłany przeze nie, do mnie.