Курсов проект № 1 по “Интернет програмиране с Java”

1.5. Forward Server

Автор: Светлин Наков

www.nakov.com

Версия: 0.9

Последна промяна: 18.03.2004

Да се напише програма на Java, която използвайки възможностите на пакета java.net реализира TCP forward сървър с възможност за администриране.

Административна част на сървъра

Сървърът трябва да поддържа административна част, с която да могат да се създават и премахват TCP  forward канали. Административната част трябва да слуша на TCP порт 9999 и да приема следните команди:

LOGIN username password – автентикира потребител. Сървърът трябва да съхранява потребителите и техните пароли в текстов файл. При успешна автентикация потребителят преминава в режим, в който може да изпълнява други команди, а при неуспех му се изпраща съобщение за грешка и му се затваря сокета. Пример:

сървър:

TCP forward server 10.0.52.181:9999 ready. Please login.

клиент:

LOGIN admin !secret%123#

сървър:

User admin accepted.

Още един пример:

клиент:

LOGIN admin mente123

сървър:

Invalid username/password!

REGISTER local_port remote_host remote_port – регистрира TCP forwarding канал, който препраща всички връзки на порт local_port към сървъра remote_host на порт remote_port. Пример

клиент:

REGISTER 2525 mail.abv.bg 25

сървър:

TCP forwarding channel created [10.0.52.181:2525 --> mail.abv.bg:25]

Още един пример:

клиент:

REGISTER 2525 mail.abv.bg 25

сървър:

Error: Can not bind to TCP port 2525.

UNREGISTER local_port – премахва TCP forwarding канала, свързан с посочения порт. Пример

клиент:

UNREGISTER 2525

сървър:

TCP forwarding channel removed [10.0.52.181:2525]

Още един пример:

клиент:

UNREGISTER 2525

сървър:

Error: Port 2525 is not assigned.

LIST – дава списък от активните в момента TCP forwarding връзки. Пример:

клиент:

LIST

сървър:

3 active TCP forwarding connections:

[10.0.52.101:2716 <--> 10.0.52.181 <--> mail.abv.bg:25]

[10.0.52.73:3079 <--> 10.0.52.181 <--> www.nakov.com:80]

[10.0.52.101:2718 <--> 10.0.52.181 <--> mail.abv.bg:25]

Още един пример:

клиент:

LIST

сървър:

0 active TCP forwarding connections.

KILL client_IP:client_port – Прекратява активната TCP forwarding сесия, която се идентифицира по IP адреса и порта източник на даден клиент   . Пример:

клиент:

KILL 10.0.52.101:2718

сървър:

TCP forwarding [10.0.52.101:2718 <--> 10.0.52.181 <--> mail.abv.bg:25] killed.

Още един пример:

клиент:

KILL 10.0.52.101:34567

сървър:

Error: No forwarding is running for [KILL 10.0.52.101:34567].

QUIT – изпраща прощално съобщение и прекратява връзката със сървъра. Пример:

клиент:

QUIT

сървър:

Happy hacking! Bye, bye.

TCP forwarding част на сървъра

TCP forwarding означава един сървър да слуша на даден TCP порт и при свързване на клиент да отваря за него връзка към предварително зададена машина (сървър) на предварително зададен порт, след което да осигурява препращане на всичко идващо от клиента към сървъра и на всичко, идващо от сървъра към клиента. При прекъсване на връзката с клиента трябва да се прекъсва и връзката със сървъра и обратното – при прекъсване на връзката със сървъра трябва да се прекъсва и връзката с клиента. На практика за клиента трябва да изглежда че не се е свързал към forward сървъра, а директно към сървъра, към който той препраща връзките.

Нека например сървърът е стартиран на машината 10.0.52.181 и му е зададено да препраща връзките към порт 2525 към машината mail.abv.bg на порт 25. В такъв случай свързването към 10.0.52.181:2525 може да има ефект подобен на следния:

клиент:

telnet localhost 2525

сървър:

220 abv.bg ESMTP

клиент:

HELO

сървър:

250 abv.bg

клиент:

HELP

сървър:

214 netqmail home page: http://qmail.org/netqmail

клиент:

QUIT

сървър:

221 abv.bg

клиент:

Connection to host lost.

Трябва да се поддържа обслужване на много потребители едновременно и независимо един от друг. Това важи и за административната част.