|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Daniel Ginsburg 2:5020/400 21 Apr 2003 23:57:04 To : netch@segfault.kiev.ua Subject : Re: ICQ и поpты -------------------------------------------------------------------------------- Valentin Nechayev <netch@segfault.kiev.ua> wrote: > AVS> P.S. Дочитал до конца и yвидел, мнение еще одного жителя эхи... > AVS> Что мол так нельзя и не pаботает... Бyдy пpобовать сам... :) > > У кого это не работает? У меня работает, штатными средствами. > Прошу прощения за два предыдущих корявых постинга - с недосыпу поломал slrn. Итак. Задача была: Alexandr V. Shutko: > Можешь попpобовать напpимеp telnet login.icq.com 1 и полyчишь > соединение по пеpвомy поpтy. Интеpесно, что они такое с TCP стеком > сделали на своих сеpвеpах ? Это точно не NAT потомy, что логин-сеpвеp > после логина пpисылает пеpеадpесацию на основной сеpвеp с yказанием > _такого же_ поpта, на какой был коннект, а в слyчае с NAT номеp поpта, > на котоpый пpишло соединение yзнать нельзя. Или можно ? Valentin Nechayev: > Совершенно никакой rocket science, повторяется на любой FreeBSD: > ipfw add xxx fwd realip,realport tcp from any to publicip in > > где realip,realport - где на самом деле слушает сервер. > > У меня так на одном хосте висит ssh на любом порту. Способ с ipfw fwd работает в части заворота соединений независимо от номера порта, но не дает способа узнать на какой именно порт клиент пытался сконнектиться в действительности. getsockname() в качестве порта покажет тот самый порт, куда сервер сказал bind(). А вот почему getsockname() дает такой результат в части sin_addr, мне совершенно непонятно. Из предыдущего моего письма: > Hа FreeBSD 4.8-RELEASE > # ifconfig xl0 alias 10.0.1.3 255.255.255.255 > # ipfw add 50 fwd 10.0.0.1,10000 tcp from any to 10.0.1.3 in > # ./listener -p 10000 > Connection from 10.0.0.254 1319 to 10.0.0.254 10000 > > 10.0.0.254 - адрес другой машины, где сказали telnet 10.0.1.3 12345 > listener - маленькая пограмуля, которая ничем кроме, как bind(), > listen(), accept() и напечатать результат getpeername(), > getsockname(), не занимается. -- dg --- ifmail v.2.15dev5 * Origin: MTU-Intel ISP (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/91047cb13ecf.html, оценка из 5, голосов 10
|