Подскажите, как сделать многопоточный backconnect? Т.е. есть сервер, на нем программа-шлюз открывает 2 порта и перенаправляет траффик с одного на другой. Машина за NAT соединяется с одним портом, клиенты соединяются с другим. Клиентов может быть несколько, а соединение от машины за NAT одно. Как лучше решить этот вопрос?
K10, это должно происходить 'позже'!!! Для каждой сессии желательно открывать на сервере новую пару портов (или париться с парсингом ипов). тут как в камасутре вариантов поз может быть много.
Для начала сформулировать правильно. Пока я понял так, что надо "преодолеть" NAT и клиенты снаружи находятся. Так вот NAT и делает то, что вам нужно и преодолевать его не нужно, а нужно пробросить порты. Правда бывают варианты, но тогда уточните в чем проблема. Если проблема обратная : пров запретил часть сервисов и вы имеете одну машину снаружи, то тогда надо использвать прокси-сервера и туннели, тут опять все зависит от задачи. Я например своего прова обхожу через туннель и никаких внешних машин не нужно.
Машина за NAT(боты) соединяются со шлюзом(порт A) и ждут от него команд. Приходит клиент на порт шлюза(порт B), в этот момент шлюз отправляет боту команду которая содержит в себе уникальный индефикатор(элементарно i++ для каждого нового клиент-подключения) для нового клиента, после чего шлюз ожидает нового подключения от бота на тотже порт A, когда бот вновь подключается он сообщает шлюзу - id клиент-подключения, ну и дальше ставим тунель между клиентом и ботом. Т.е. бот постоянно держит одно соединение для приема команд на создание новых соединений, ну а другие создает для организации тунеля. Понятно?)
С трудом. Ты описываешь решение неизвестной мне задачи. Или решай ее сам или опиши задачу нормально. Чем тебе NAT мешает? До сих пор были клиенты и шлюз. Теперь уже есть еще машины(боты) за NAT. За NAT всегда означало "внутри", а у тебя похоже это снаружи. Пока топологию сети не нарисуешь и расположение всех составляющих - понятно будет только телепатам.
valterg я вообще для K10 писал) А вот Вы видемо плохо предсталвяете задачу, почитайте в интернетах, что такое backconnect и зачем он нужен... Это не много не то, что Вы пытаетесь объяснить.
>от машины за NAT одно. не заметил. Ну тогда создаем пакеты типа struct{char command; uint clientId; uint dataSize; char data[0];} и гоняем через них трафик туда-сюда через одно соединеие шлюз-машина за натом. Это геморойнее...
Теперь понял. Надо было его имя вбивать Кстати я фактически для K10 и писал все. Почитал. Обсуждение сетевого взлома здесь не профильное, т.ч. ответа не будет.
Правильно ли я все понял???? 1. Шлюз (Сервер) находится по NATом.!? 2. Машины (Боты) в глобальной сети (Интернет).!? 3. Клиенты тоже в глобальные сети.? 4. Клиент подключается к шлюзу (например порт 80), Сервер соединяется с Ботом и .....? Он должен пропускать трафик через себя или может объединить Клиента и Бота?
>Почитал. Обсуждение сетевого взлома здесь не профильное, т.ч. ответа не будет. это не сетевой взлом, это доступ к компам в локалке, из инета.
Shadovv13 И клиент и боты могут устанавливать только исходящие соединения. Для их "обьединения", т.е. передачи траффика между ними служит шлюз-сервер, находящийся в глобальной сети и принимающий их (клиента и бота) соединения. valterg Настройки НАТ не доступны.
Для начала нужно чтобы был свой идентификатор, для того чтобы сервер мог различить входные бидключення (при работе через один порт. Например: при соединенные на сервер отправляются данные B101 (Бот 101)) или C002 (клиент 2). До сих имен сервер прикрепит IP адрес, и будет выполнять маршрутизацию. Для таких целей используют IСQ. Каждый новый бот автоматом получает уникальный номер и отправляет на один известный (Сервер \ Клиент) через тот же IСQ.
Shadovv13 Проще открыть 2 порта - один для бота, другой для клиента. Мне нужно socks соединение, чтобы можно было завернуть через него произвольный TCP трафик...
Под словом произвольный, это просто передача данных или модификацию заголовка? Во втором случае winsock не позволяет нормально работает с raw сокетами.