The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"tcp-сервер"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"tcp-сервер" 
Сообщение от Xander emailИскать по авторуВ закладки(ok) on 15-Мрт-05, 12:50  (MSK)
Добрый день, вопрос:
как на perl/C/C++ организовать для tcp-сервера фильтрацию подключений по ip, т.е. как получать ip удалённого конца, но до вызова accept()?
спасибо заранее.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

  • tcp-сервер, PoizOn, 15:32 , 15-Мрт-05, (1)  
    • tcp-сервер, Xander, 16:26 , 15-Мрт-05, (2)  
      • tcp-сервер, PoizOn, 16:43 , 15-Мрт-05, (3)  
  • tcp-сервер, mthawk, 10:57 , 17-Мрт-05, (4)  
    • tcp-сервер, PoizOn, 11:04 , 17-Мрт-05, (5)  
      • tcp-сервер, Xander, 15:32 , 17-Мрт-05, (6)  
        • tcp-сервер, PoizOn, 13:56 , 18-Мрт-05, (7)  
          • tcp-сервер, Xander, 16:00 , 18-Мрт-05, (8)  

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "tcp-сервер" 
Сообщение от PoizOn emailИскать по авторуВ закладки(ok) on 15-Мрт-05, 15:32  (MSK)
> Добрый день, вопрос:
>как на perl/C/C++ организовать для tcp-сервера фильтрацию подключений по ip, т.е. как
>получать ip удалённого конца, но до вызова accept()?
>спасибо заранее.

inet_aton не подходит?


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "tcp-сервер" 
Сообщение от Xander emailИскать по авторуВ закладки(ok) on 15-Мрт-05, 16:26  (MSK)
>> Добрый день, вопрос:
>>как на perl/C/C++ организовать для tcp-сервера фильтрацию подключений по ip, т.е. как
>>получать ip удалённого конца, но до вызова accept()?
>>спасибо заранее.
>
>inet_aton не подходит?


к какому дескриптору применять inet_ntoa?
пример на пёрле из доки:

# create socket $main_sock
# ...
$readable_handles->add($main_sock);
for(;;)
    ($new_readable) = IO::Select->select($readable_handles, undef, undef, 0);
    foreach $sock (@$new_readable) {
        if ($sock == $main_sock) {

# как думается, здесь необходимо проверять ip клиента,
# если он валидный - аксептить, но как получить ip?
            $new_sock = $sock->accept();
# ...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "tcp-сервер" 
Сообщение от PoizOn emailИскать по авторуВ закладки(ok) on 15-Мрт-05, 16:43  (MSK)
>>> Добрый день, вопрос:
>>>как на perl/C/C++ организовать для tcp-сервера фильтрацию подключений по ip, т.е. как
>>>получать ip удалённого конца, но до вызова accept()?
>>>спасибо заранее.
>>
>>inet_aton не подходит?
>
>
>к какому дескриптору применять inet_ntoa?
>пример на пёрле из доки:
>
># create socket $main_sock
># ...
>$readable_handles->add($main_sock);
>for(;;)
>    ($new_readable) = IO::Select->select($readable_handles, undef, undef, 0);
>    foreach $sock (@$new_readable) {
>        if ($sock == $main_sock)
>{
>
># как думается, здесь необходимо проверять ip клиента,
># если он валидный - аксептить, но как получить ip?
>            $new_sock = $sock->accept();
># ...
Э.. Я про модуль Socket говорил.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "tcp-сервер" 
Сообщение от mthawk emailИскать по авторуВ закладки(??) on 17-Мрт-05, 10:57  (MSK)
> Добрый день, вопрос:
>как на perl/C/C++ организовать для tcp-сервера фильтрацию подключений по ip, т.е. как
>получать ip удалённого конца, но до вызова accept()?
>спасибо заранее.


Если вопрос стоит пускать или не пускать подключение с определенного айпи, почему бы не воспользоваться iptables/ipchains ?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "tcp-сервер" 
Сообщение от PoizOn emailИскать по авторуВ закладки(ok) on 17-Мрт-05, 11:04  (MSK)
>> Добрый день, вопрос:
>>как на perl/C/C++ организовать для tcp-сервера фильтрацию подключений по ip, т.е. как
>>получать ip удалённого конца, но до вызова accept()?
>>спасибо заранее.
>
>
>Если вопрос стоит пускать или не пускать подключение с определенного айпи, почему
>бы не воспользоваться iptables/ipchains ?
Так это привзяка к платформе и софту.
Я писал недавно сервер на tcp и спокойно фильтровал подключения по ИП. Только я предпочитаю работать с Socket, а не с IO::Socket в таких задачах.


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "tcp-сервер" 
Сообщение от Xander emailИскать по авторуВ закладки(ok) on 17-Мрт-05, 15:32  (MSK)
>Я писал недавно сервер на tcp и спокойно фильтровал подключения по ИП.
>Только я предпочитаю работать с Socket, а не с IO::Socket в
>таких задачах.

а можно чуть подробней, например:

use Socket;
socket(SERVER,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
setsockopt(SERVER,SOL_SOCKET,SO_REUSEADDR,1);
$addr=sockaddr_in($some_port,INADDR_ANY);
bind(SERVER,$addr) or die "can't bind: $!\n";
listen(SERVER,0) or die "can't listen: $!\n";
while (accept(CLIENT,SERVER))
{
#blahblahblah
}

как мне в этом случае до accept'a определьть ip подключающегося?
или в принципе подход неверен?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "tcp-сервер" 
Сообщение от PoizOn emailИскать по авторуВ закладки(ok) on 18-Мрт-05, 13:56  (MSK)
>>Я писал недавно сервер на tcp и спокойно фильтровал подключения по ИП.
>>Только я предпочитаю работать с Socket, а не с IO::Socket в
>>таких задачах.
>
>а можно чуть подробней, например:
>
>use Socket;
>socket(SERVER,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
>setsockopt(SERVER,SOL_SOCKET,SO_REUSEADDR,1);
>$addr=sockaddr_in($some_port,INADDR_ANY);
>bind(SERVER,$addr) or die "can't bind: $!\n";
>listen(SERVER,0) or die "can't listen: $!\n";
>while (accept(CLIENT,SERVER))
>{
> #blahblahblah
>}
>
>как мне в этом случае до accept'a определьть ip подключающегося?
>или в принципе подход неверен?
Для примера приведу кусок из моего сервера:

while(1) {
my($buffer);
next unless my $remote_addr=accept(SESSION,SOCK);
my($port,$hisaddr)=sockaddr_in($remote_addr);
## если IP нету в конфигах - отрубаем клиента
my $ip=inet_ntoa($hisaddr);
next if $ip ne 'Что нам нужно';
...
}
Здесь конечно не до accept'a идет отключение - но без акцепта - думаю никак, ведь сервер должен послать клиенту отказ -а для этого нужно установить accept.
Во всяком случае мой сервак раобтает без проблем и я его тестировал на перегруз - чисто - он отключает клиентов и не нагружает систему даже при большом кол-ве запросов.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "tcp-сервер" 
Сообщение от Xander emailИскать по авторуВ закладки(ok) on 18-Мрт-05, 16:00  (MSK)
>Для примера приведу кусок из моего сервера:
>
>while(1) {
>my($buffer);
>next unless my $remote_addr=accept(SESSION,SOCK);
>my($port,$hisaddr)=sockaddr_in($remote_addr);
>## если IP нету в конфигах - отрубаем клиента
>my $ip=inet_ntoa($hisaddr);
>next if $ip ne 'Что нам нужно';
>...
>}
>Здесь конечно не до accept'a идет отключение - но без акцепта -
>думаю никак, ведь сервер должен послать клиенту отказ -а для этого
>нужно установить accept.
>Во всяком случае мой сервак раобтает без проблем и я его тестировал
>на перегруз - чисто - он отключает клиентов и не нагружает
>систему даже при большом кол-ве запросов.

спасибо, но здесь подключение всё-таки имеет место быть (и затем сразу отключение), а меня интересует посылка RST сразу после прихода SYN'а с неугодного ip, как если бы порт совсем не принимал подключения..

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру