Курсов проект № 1 по “Интернет програмиране с Java”
1.5. Forward Server
Автор: Светлин Наков
Версия: 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. |
Трябва да се поддържа обслужване на много потребители едновременно и независимо един от друг. Това важи и за административната част.