The OpenNET Project / Index page

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

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

"Помогите не хотит работать... :("
Сообщение от VAMPiR emailИскать по авторуВ закладки on 07-Ноя-02, 23:13  (MSK)
Вообщем такова проблема... есть программка которая коннектится на сокет... через inetd при соединении врубается скрипт которые ловит сообщение который дает клиент и пишет в файлик... но еще мне надо чтобы он писал также IP с которого коннектится программка. Зделал следующее... прописал название программки и порт в services и inetd, также прописал для определение iP строчку в hosts.allow
gcinet : ALL : setenv REMOTE_ADDR %a : allow

И соответственно вот скрипт:

#!/usr/bin/perl
$ip=$ENV{REMOTE_ADDR};
$iii=<STDIN>;
open (f, ">>/disk2/stin");
print f $iii, $ip;
close (f);
<STDIN>;

так вот мессаги он ловит и пишет в файлик а вот адресс нет... :( В чем моя ошибка и как это осуществить... ОС FreeBSD 4.2

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "RE: Помогите не хотит работать... :("
Сообщение от Soldier Искать по авторуВ закладки on 08-Ноя-02, 13:03  (MSK)
>Вообщем такова проблема... есть программка которая коннектится на сокет... через inetd при
>соединении врубается скрипт которые ловит сообщение который дает клиент и пишет
>в файлик... но еще мне надо чтобы он писал также IP
>с которого коннектится программка. Зделал следующее... прописал название программки и порт
>в services и inetd, также прописал для определение iP строчку в
>hosts.allow
>gcinet : ALL : setenv REMOTE_ADDR %a : allow
>
>И соответственно вот скрипт:
>
>#!/usr/bin/perl
>$ip=$ENV{REMOTE_ADDR};
>$iii=<STDIN>;
>open (f, ">>/disk2/stin");
>print f $iii, $ip;
>close (f);
><STDIN>;
>
>так вот мессаги он ловит и пишет в файлик а вот адресс
>нет... :( В чем моя ошибка и как это осуществить... ОС
>FreeBSD 4.2


Как  в inetd.conf прописываете? Дело в том, что, насколько я знаю, самому inetd абсолютно фиолетово что там у вас в hosts.allow, а интересуются этим файлом проги запускаемые из inetd.conf, например tcpd. Короче говоря у меня сработало так: (правда на Linux-е и я использовал 109 порт - pop2)
в inetd.conf
pop2 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/gcinet

в hosts.allow:
gcinet: ALL: setenv = REMOTE_ADDR %a

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Помогите не хотит работать... :("
Сообщение от VAMPiR Искать по авторуВ закладки on 08-Ноя-02, 15:09  (MSK)
>Как  в inetd.conf прописываете? Дело в том, что, насколько я знаю,
>самому inetd абсолютно фиолетово что там у вас в hosts.allow, а
>интересуются этим файлом проги запускаемые из inetd.conf, например tcpd. Короче говоря
>у меня сработало так: (правда на Linux-е и я использовал 109
>порт - pop2)
>в inetd.conf
>pop2 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/gcinet
>
>в hosts.allow:
>gcinet: ALL: setenv = REMOTE_ADDR %a

Это все понятно.... вот только в FreeBSD такого как tcpd нет... :( И какая этому замена я незнаю... :(

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Помогите не хотит работать... :("
Сообщение от Soldier Искать по авторуВ закладки on 10-Ноя-02, 08:06  (MSK)
>>Как  в inetd.conf прописываете? Дело в том, что, насколько я знаю,
>>самому inetd абсолютно фиолетово что там у вас в hosts.allow, а
>>интересуются этим файлом проги запускаемые из inetd.conf, например tcpd. Короче говоря
>>у меня сработало так: (правда на Linux-е и я использовал 109
>>порт - pop2)
>>в inetd.conf
>>pop2 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/gcinet
>>
>>в hosts.allow:
>>gcinet: ALL: setenv = REMOTE_ADDR %a
>
>Это все понятно.... вот только в FreeBSD такого как tcpd нет... :(
>И какая этому замена я незнаю... :(

А что свой tcp-wrapper написать проблема? Например (для Linux):

//=================================
//my_wrapper.c:
//#include <stdlib.h>
//#include <unistd.h>
//#include <sys/socket.h>
//#include <arpa/inet.h>
// ^^^^  может понадобиться если компилить С++ компилером
#include <netinet/in.h>
#include <errno.h>

struct sockaddr_in remote;

int main(int argc,char **argv)
{
int len;

len=sizeof(remote);
if (getpeername(0,(struct sockaddr *) &remote,(socklen_t *) &len) == -1) {
    printf("Got error: %s\n",strerror(errno));
    exit(-1);
}

if (setenv("REMOTE_ADDR",inet_ntoa(remote.sin_addr),1)) exit(-1);
execvp(*argv,argv);
puts("Fail!!!!!");
exit(-1);
}
//==============================
Эта прога просто выставляет переменную окружения REMOTE_ADDR и вызывает прогу argv[0] с аргументами argv. Поскольку вызывается из inetd,  то argv[0] необязательно есть имя текущей программы. Компилим это (в BSD могут быть другие головные файлы), ложим, скажем, в /usr/local/bin/my_wrapper.

Далее, пишем в inetd.conf

pop2 stream tcp nowait root /usr/local/bin/my_wrapper /usr/local/bin/gcinet
(в данном случае argv[0]  есть /usr/local/bin/gcinet)

Все...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Помогите не хотит работать... :("
Сообщение от VAMPiR emailИскать по авторуВ закладки on 10-Ноя-02, 10:47  (MSK)
>А что свой tcp-wrapper написать проблема? Например (для Linux):
>
>//=================================
>//my_wrapper.c:
>//#include <stdlib.h>
>//#include <unistd.h>
>//#include <sys/socket.h>
>//#include <arpa/inet.h>
>// ^^^^  может понадобиться если компилить С++ компилером
>#include <netinet/in.h>
>#include <errno.h>
>
>struct sockaddr_in remote;
>
>int main(int argc,char **argv)
>{
> int len;
>
> len=sizeof(remote);
> if (getpeername(0,(struct sockaddr *) &remote,(socklen_t *) &len) == -1) {
>    printf("Got error: %s\n",strerror(errno));
>    exit(-1);
> }
>
> if (setenv("REMOTE_ADDR",inet_ntoa(remote.sin_addr),1)) exit(-1);
> execvp(*argv,argv);
> puts("Fail!!!!!");
> exit(-1);
>}
>//==============================
>Эта прога просто выставляет переменную окружения REMOTE_ADDR и вызывает прогу argv[0] с
>аргументами argv. Поскольку вызывается из inetd,  то argv[0] необязательно есть
>имя текущей программы. Компилим это (в BSD могут быть другие головные
>файлы), ложим, скажем, в /usr/local/bin/my_wrapper.
>
>Далее, пишем в inetd.conf
>
>pop2 stream tcp nowait root /usr/local/bin/my_wrapper /usr/local/bin/gcinet
>(в данном случае argv[0]  есть /usr/local/bin/gcinet)
>
>Все...


Всем огромное спасибо за помощь, все заработало....

П.С. Я просто в программировании сокетов еще не селен... но все еще в переди... :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Помогите не хотит работать... :("
Сообщение от uldus Искать по авторуВ закладки on 10-Ноя-02, 12:17  (MSK)
>Это все понятно.... вот только в FreeBSD такого как tcpd нет... :(
>И какая этому замена я незнаю... :(

man inted
См. опции -w и -W

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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