Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Valentin Nechayev                    2:5020/400     23 Apr 2003  11:13:09
 To : Daniel Ginsburg
 Subject : Re: ICQ и поpты
 -------------------------------------------------------------------------------- 
 
 
 >>> Daniel Ginsburg wrote:
 
 >> Совершенно никакой rocket science, повторяется на любой FreeBSD:
 >> ipfw add xxx fwd realip,realport tcp from any to publicip in
 >> где realip,realport - где на самом деле слушает сервер.
 >> У меня так на одном хосте висит ssh на любом порту.
 DG> Способ с ipfw fwd работает в части заворота соединений независимо
 DG> от номера порта, но не дает способа узнать на какой именно порт клиент
 DG> пытался сконнектиться в действительности. getsockname() в качестве порта
 DG> покажет тот самый порт, куда сервер сказал bind().
 
 И давно оно так себя стало вести? Только что проверил на 4.8-RELEASE,
 честно показывает тот порт, куда пришло соединение согласно TCP заголовку.
 
 root@iv:~#ipfw list
 00100 fwd 127.0.0.1,2020 tcp from any to me 2021 in
 65535 allow ip from any to any
 
 netch@iv:~/prog/tests/sockets/listen>./l & telnet localhost 2020
 [1] 6084
 Trying 127.0.0.1...
 0x7F000001:2020
 Connected to localhost.
 Escape character is '^]'.
 Connection closed by foreign host.
 [1]+  Done                    ./l
 netch@iv:~/prog/tests/sockets/listen>./l & telnet localhost 2021
 [1] 6086
 Trying 127.0.0.1...
 0x7F000001:2021
 Connected to localhost.
 Escape character is '^]'.
 Connection closed by foreign host.
 [1]+  Done                    ./l
 
 Как видите, номер порта рисуется совершенно честно.
 Повторим с другим хостом:
 
 netch@iv:~/prog/tests/sockets/listen>./l & telnet 10.0.0.2 2021
 [1] 6095
 Trying 10.0.0.2...
 0x0A000002:2021
 Connected to ivq.nn.kiev.ua.
 Escape character is '^]'.
 Connection closed by foreign host.
 [1]+  Done                    ./l
 
 И хост тоже рисуется честно.
 
 Во всех случаях l слушала на INADDR_ANY:2020; 10.0.0.2 - алиас на lo0.
 
 DG> А вот почему getsockname() дает такой результат в части sin_addr, мне
 DG> совершенно непонятно.
 
 Мне тоже непонятно, как Вы этого добились.
 
 DG> Из предыдущего моего письма:
 >> 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(), не занимается.
 
 Вот мой код l.c:
 
 ==={{{
 #include <sys/types.h>
 #include <string.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include <err.h>
 #include <stdio.h>
 
 int main()
 {
   int s, s2;
   int c1 = 1;
   struct sockaddr_in sia;
   socklen_t sl;
   memset( &sia, 0, sizeof sia );
   sia.sin_family = AF_INET;
   sia.sin_addr.s_addr = INADDR_ANY;
   sia.sin_port = htons( 2020 );
   s = socket( PF_INET, SOCK_STREAM, 0 );
   if( s == -1 )  err( 1, "socket()" );
   setsockopt( s, SOL_SOCKET, SO_REUSEADDR, &c1, sizeof c1 );
   setsockopt( s, SOL_SOCKET, SO_REUSEPORT, &c1, sizeof c1 );
   if( bind( s, (struct sockaddr*) &sia, sizeof sia ) < 0 )
     err( 1, "bind()" );
   if( listen( s, 10 ) < 0 )  err( 1, "listen()" );
   s2 = accept( s, NULL, NULL );
   if( s2 == -1 )  err( 1, "accept()" );
   sl = sizeof sia;
   if( getsockname( s2, ( struct sockaddr* ) &sia, &sl ) < 0 )
     err( 1, "getsockname()" );
   printf( "0x%08lX:%d\n",
       ntohl(sia.sin_addr.s_addr), (int)ntohs(sia.sin_port) );
   return 0;
 }
 ===}}}
 
 Компилировалось: gcc -o l l.c -g -Wall -W
 
 Может, влияет разная обработка проходящего на lo0 и на честные интерфейсы?
 Проверьте на lo0. Я как доберусь до работы проверю на эзере.
 -netch-
 --- ifmail v.2.15dev5
  * Origin: Dark side of coredump (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 ICQ и порты   Ivan Poplavsky   16 Apr 2003 19:18:28 
 ICQ и порты   Alexander Lunyov   16 Apr 2003 19:10:06 
 Re: ICQ и порты   Cyrill Malevanov   16 Apr 2003 21:50:38 
 Re: ICQ и порты   Stas Degteff   17 Apr 2003 12:44:42 
 ICQ и поpты   Alexandr V. Shutko   17 Apr 2003 19:27:29 
 Re: ICQ и поpты   Valentin Nechayev   20 Apr 2003 11:31:15 
 Re: ICQ и поpты   Daniel Ginsburg   20 Apr 2003 17:49:45 
 ICQ и поpты   Alexandr V. Shutko   21 Apr 2003 20:06:49 
 Re: ICQ и поpты   Valentin Nechayev   21 Apr 2003 20:59:05 
 Re: ICQ и поpты   Daniel Ginsburg   21 Apr 2003 22:50:14 
 Re: ICQ и поpты   Daniel Ginsburg   21 Apr 2003 23:57:04 
 Re: ICQ и поpты   Valentin Nechayev   23 Apr 2003 11:13:09 
 Re: ICQ и поpты   Valentin Nechayev   23 Apr 2003 13:20:32 
 Re: ICQ и поpты   Daniel Ginsburg   24 Apr 2003 00:18:33 
 Re: ICQ и порты   Vadim Mikhailov   17 Apr 2003 17:56:42 
Архивное /ru.unix.bsd/73688b53aaa3.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional