Nat або Port Mapping, як організувати на дельфах
Питання щодо реалізації даного механізму у своїй програмі, я повивчав те що знайшов з цього питання, а знайшов я мало = (Мені потрібно написати ретранслятор (проксі) з чистим Nat для своєї локалки (вивчений софт, який навіть зараз стоїть мене не задовольняє =)) я зрозумів що просто відкриваєш сокс порт і ловиш вхідний пакет, переправляєш його на сервер, питання в тому куди його далі відправляти коли я його прийняв? на гватів провайдера не змняючи, або інакше якось, коротше де по цьому можна почитати?
Та ще питання є, поясніть відмінності відкриття портів UDP порт TCP порт Або коли я відкриваю Сокс порт то все одно який трафік йде за яким протоколом, просто не зрозуміло як реалізувати NAT
Ти вже визначся NAT потрібен або порт-мапінг, дві великі різниці
Скажу так. Щоб написати щось вартісне (типу WinRoute або WinGate) без драйверопису не обійтися.
UDP порт TCP порт C цим ніби я розібрався, та я розумію що треба буде писати драйвер, вся проблема складається в тому щоб отримати ip куди пакет пересилати, і мені підійде NAT проста ретрансляція пакетів.
Ось як сам драйвер реалізувати, написати його моно струму на Delphi 3 версії, це в статті розказано. Але що в самому драйвері писати навіть не уявляю собі, інформації просто ніякої немає. Мене навіть пріть трохи, технологія проста отримай пакет зміни іп відправника і пішли його далі, отримав відповідь, відсилаєш тому, хто запросив, все просто, а ось щоб таке реалізувати треба зі шкіри геть лізти. =(
так я на ньому і не пишу і знаю про дельфу 3. мені просто треба реалізувати нат.
←→Владимір Д Бєлусов (2005-05-02 02:06) [9]
Якщо тобі потрібний NAT, то за великим рахунком, ти маєш побудувати символьний сокет, тарозбирати пакети, що прийшли на нього. І відповідно, на підставі цього приймати рішення, що з пакетом робити далі - відправити його наступному маршрутизатору, або він призначений для тебе, або він взагалі повинен бути відкинутий.
Якщо ти оправляєш пакет комусь далі, то ти повинен бути готовим прийняти відповідь на цей пакет на зовнішньому (умовно) інтерфейсі і відправити його відправнику першого пакета. При цьому звичайно змінивши DST_ADDR.
"На апельсинах" - прийшов пакет, вирішили відправляти його далі. У цьому випадку заносимо в якусь "карту з'єднань" SRC_IP, SRC_PORT і DST_PORT цього пакета, його порядковий номер. Далі змінюємо SRC_IP на свій, відправляємо його (у найпростішому випадку) з такого ж порту, як і оригінальний SRC_PORT на маршрутизатор, який прописаний як маршрут до DST_IP. При приході пакета на зовнішній інтерфейс, по ACK-у, DST_PORT, SRC_PORT і SRC_IP шукаємо відповідний пакет у нашій "карті". Якщо знаходимо - відправляємо його на SRC_IP, записаний у цій карті.
Тобто, коли ти його прийняв, ти маєш його відправити його наступному маршрутизатору (твоїм гейтвею, в найпростішому випадку), підмінити SRC_IP на свій, і запам'ятавши параметри цього пакета, щоб при отриманні відповіді знати, кому і куди його переправити.
> Vladimir D BelousovДякую за роз'яснення, я це зрозумів з технічної документації п даному прооколу який рфс точно не пам'ятаю, мене цікавить реалізація цієї справи програмно, тобто написання NDIS драйвера, документи по такій справі я ще не знайшов, є щось на ось тут http://ntdev.h1.ru/ndis_fw.html - якщо хто розбереться з цим, прошу повідомити сюди. Я доведений до такого стану що готовий вже платити за цей драйвер. =)) (за реалізацію його у належному рівні)
Може спробувативикористовувати готовий драйвер?
> DekaПідскажи готовий де взяти і хороший хелп до нього бажано
Сходи на www.nat32.com Це сторінка IP Router"а. Він у мене якось стояв і навіть працював. Причому досить не погано. Автор каже що буде до нього API. Може бути вдасться домовитися з ним щодо драйвера?
а як він тобі? сам роутер?
WinPCap є ще такий драйверок. який ловить пакетики на сетевусі. начебто можна дізнатися куди хто що шле. Хоча може я і не правий.
У ньому можна збирати пакети з інтерфейсу і переглядати, щоб вести статистику по моєму цілком достатньо. :)