Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подделка обратного адреса UDP-сообщения! 
:(
    Опции темы
Zerg1
Дата 6.10.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



Имеем следующую проблему. Есть клиент-серверное приложение, в котором идёт обмен сообщениями по UDP протоколу. Понадобилось написать над этим делом TCP/IP-мост. То есть не у всех клиентов есть возможность связаться с сервером по UDP. Сами понимаете, «подбривка» UDP файрами, http-proxy и прочие прелести корпоративных интранетов. Посему, чтобы не курочить логику сетевого движка клинта и сервера было принято решение сделать их полное тунелирование через TCP.

В ходе решения этой проблемы возник вопрос. Пусть на машине с IP адресом A есть в одном процессе две нити, обменивающиеся по UDP. Одна - сервер, на порту P1, а вторая – клиент (порт при посылке будет любой - какой займём, обозначим его Pany). Также в нити клиента есть переменная addr типа sockaddr_in, содержащая некий заранее известный и специально заданный IP адрес и порт, например, Ax:Py.

КАК послать (или что сделать надо?) из нити клиента сообщение на сервер ТАКИМ образом, чтобы на сервере АДРЕС ОТПРАВИТЕЛЯ сообщения был не A:Pany, а Ax:Py?

Это важно, иначе мост без курочки созданного движка сделать не удастся.

Добавлено @ 23:09 
Да, программы – глухие консольники на vcpp 5.0. Никакого mfc и прочего йада не пьйу smile.
Знаю, что старый компилер, но работает же!

PM MAIL   Вверх
Romikgy
Дата 6.10.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



Цитата(Zerg1 @  6.10.2006,  22:05 Найти цитируемый пост)
В ходе решения этой проблемы возник вопрос. Пусть на машине с IP адресом A есть в одном процессе две нити, обменивающиеся по UDP. Одна - сервер, на порту P1, а вторая – клиент (порт при посылке будет любой - какой займём, обозначим его Pany). Также в нити клиента есть переменная addr типа sockaddr_in, содержащая некий заранее известный и специально заданный IP адрес и порт, например, Ax:Py.

вот это я мало понял smile
я так понимаю делаешь тунель для юдп
так что нельзя полностью инкапсулировать пакет юдп в тсп?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Zerg1
Дата 6.10.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



втавить данные из юдп пакета в тэсипи можно.
это не вопрос
вопрос в том что сервер юдп заточен на реальные адреса юдп клиентов. он должен получать пакеты как бы от "далёких" машин, а не с себя, с нити-пересыльщика.
обстрагируйся от всего, забудь всё что я писал и сосердоточься только на этом:

"В ходе решения этой проблемы возник вопрос. Пусть на машине с IP адресом A есть в одном процессе две нити, обменивающиеся по UDP. Одна - сервер, на порту P1, а вторая – клиент (порт при посылке будет любой - какой займём, обозначим его Pany). Также в нити клиента есть переменная addr типа sockaddr_in, содержащая некий заранее известный и специально заданный IP адрес и порт, например, Ax:Py.
КАК послать (или что сделать надо?) из нити клиента сообщение на сервер ТАКИМ образом, чтобы на сервере АДРЕС ОТПРАВИТЕЛЯ сообщения был не A:Pany, а Ax:Py?".
PM MAIL   Вверх
Romikgy
Дата 7.10.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



вот это и запутано!
я правильно понял , т.е. для того чтобы передать пакет юдп ты шлешь его на локальный юдп порт который пересылает по тсп,
имхо есть 2 решения :
1. курочим заголовок юдп под себя, ( при этом надо знать все айпи в цепочке!)
2. перехватываем вин апи от сокета, и все юдп на определеный порт, шлем в трубу через тсп


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Zerg1
Дата 7.10.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



как курочить заголовок?
смысл задачи моей в том, что сервер не знает кто из клиентов реальный юдп, а кто нет. поэтому пересыльщик на сервере должен уже локально послать пакет на сервер, НО АДРЕС ОТПРАВИТЕЛЯ  ДОЛЖЕН БЫТЬ НЕ ЛОКАЛЬНЫЙ, пересыльщецкий, а такой, какой надо.
КАК это сделать?

ещё раз
задача - это то, что я откавычил, когда говорил про сосредоточение.

Это сообщение отредактировал(а) Zerg1 - 7.10.2006, 00:30
PM MAIL   Вверх
Romikgy
Дата 7.10.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



Цитата(Zerg1 @  6.10.2006,  23:27 Найти цитируемый пост)
как курочить заголовок?

читаем как устроен айпи пакет вообще! потом как юдп
Цитата(Zerg1 @  6.10.2006,  23:27 Найти цитируемый пост)
ещё раз
задача - это то, что я откавычил, когда говорил про сосредоточение.

вот тоже самое только по русски , а не каким то непонятным языком!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Zerg1
Дата 7.10.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 11.7.2006

Репутация: нет
Всего: нет



А какая разница как он устроен, этот пакет. Я послал сообщение с помощью  sendto() и всё. Как тут подступиться к его устройству?

А что непонятно. На одной машине один процесс из двух нитей. Одна нить посылает другой UDP сообщение. Надо чтобы принимающая нить (UDP-сервер), осуществляющая приём с помощью

data_size = recvfrom(my_sock, buff, BUFF_SIZE - 1, 0, (sockaddr *) &client_addr, &client_addr_size);

в client_addr имела не сокет нити отправителя с этой же машины, а тот адрес, какой нить отправитель захочет.

Это нужно для того, чтобы не лезть в устройство сервера. Он должен работать как раньше. Идентификацие клиентов идёт по их реальныом адресу и порту.
PM MAIL   Вверх
Romikgy
Дата 8.10.2006, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



Цитата(Zerg1 @  7.10.2006,  21:59 Найти цитируемый пост)
А какая разница как он устроен, этот пакет.

нужно для того что бы
Цитата(Zerg1 @  6.10.2006,  23:27 Найти цитируемый пост)
как курочить заголовок?



Цитата(Zerg1 @  7.10.2006,  21:59 Найти цитируемый пост)
Идентификацие клиентов идёт по их реальныом адресу и порту. 

ты хочешь это делать , но имхо без залазиния в сами заголовки пакетов такого не сделать , вариант с , чтото типа, юдп - прокси(с мостом через тсп) не подойдет т.к. будет менятся адресная информация
и вообще имхо что либо сделать через простые ф_ции типа
Цитата(Zerg1 @  7.10.2006,  21:59 Найти цитируемый пост)
data_size = recvfrom(my_sock, buff, BUFF_SIZE - 1, 0, (sockaddr *) &client_addr, &client_addr_size);

у тя не выйдет , если нет возможности изменить свой протокол обмена по юдп, так что бы инфа о клиенте передавалась в данных юдп


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0824 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.