Курсов проект № 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.
|
Трябва да се поддържа обслужване на много потребители едновременно и независимо един от друг. Това важи и за административната част.
Сподели с приятели: |