- tcp-сервер, PoizOn, 15:32 , 15-Мрт-05 (1)
- tcp-сервер, Xander, 16:26 , 15-Мрт-05 (2)
>> Добрый день, вопрос: >>как на 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(); # ...
- tcp-сервер, mthawk, 10:57 , 17-Мрт-05 (4)
- tcp-сервер, PoizOn, 11:04 , 17-Мрт-05 (5)
- tcp-сервер, Xander, 15:32 , 17-Мрт-05 (6)
>Я писал недавно сервер на 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 подключающегося? или в принципе подход неверен?
- tcp-сервер, PoizOn, 13:56 , 18-Мрт-05 (7)
- tcp-сервер, Xander, 16:00 , 18-Мрт-05 (8)
>Для примера приведу кусок из моего сервера: > >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, как если бы порт совсем не принимал подключения..
|