/* May 1996 Port redirector Author: Sergey V Smirnov ÏÅÐÅÍÀÇÍÀ×ÀÅÒ ÂÂÎÄ/ÂÛÂÎÄ ÍÀ ÇÀÄÀÍÍÛÉ ÏÎÐÒ ÇÀÄÀÍÍÎÃÎ ÕÎÑÒÀ È ÍÀ ËÅÒÓ ÏÅÐÅÊÎÄÈÐÓÅÒ ÏÐÎÕÎÄßÙÈÉ ÏÎÒÎÊ - ÒÓÄÀ - ÈÇ koi  win ÎÁÐÀÒÍÎ - ÈÇ win  koi (ÈËÈ ÀËÜÒÅÐÍÀÒÈÂÊÈ) Usage: redirector -h host -p port [ -t timeout ] [ -c {alt|win} ] [ -S script ] -c ÂÈÄ ÏÅÐÅÊÎÄÈÐÎÂÊÈ alt ÈËÈ win -S ÑÊÐÈÏÒ Â ÔÎÐÌÅ: "îÆÈÄÀÅÌÀß_ÑÒÐÎÊÀ" "ÏÎÑÛËÀÅÌÀß_ÑÒÐÎÊÀ" ... ÇÀÑÛËÀÅÒÑß Â ÏÎÐÒ ÄÎ ÍÀ×ÀËÀ ÏÅÐÅÊÎÄÈÐÎÂÊÈ óÑÒÀÍÀÂËÈÂÀÅÒÑß ÏÐÎÃÐÀÌÌÀ ×ÅÐÅÇ inetd - ÊÎÒÎÐÛÉ ÑÀÌ ÏÅÐÅÍÀÇÍÀ×ÀÅÒ stdin/stdout ÐÅÄÈÐÅÊÒÎÐÀ ÍÀ ÏÎÐÒ, ÏÎ ÊÎÒÎÐÎÌÓ Ê ÍÅÌÓ ÑÎÅÄÈÍßÅÒÑß ÊËÈÅÍÒ. ïÐÎÃÐÀÌÌÊÓ ÌÎÆÍÎ ÒÀÊ ÆÅ ÈÑÏÎËÜÇÎÂÀÒÜ ÊÀÊ "ÐÛÁÓ" ÄËß standalone ÄÅÌÎÍÀ proxy-ÏÅÐÅÊÎÄÈÐÎÂÙÈÊÀ (ÎÑÒÀËÎÑÜ ÄÎÏÈÑÀÒÜ ÊÓÑÎÊ, ÊÎÒÎÐÛÉ ÂÌÅÑÒÎ stdin/stdout ÁÐÀË ÁÛ tcp/ip ÑÎÅÄÈÍÅÍÈÅ ×ÅÐÅÇ ÇÀÄÀÍÍÛÉ ÏÎÐÒ îÑÍÎÂÍÀß ÖÅËÜ - ÑÄÅËÀÒÜ ÏÅÐÅÊÎÄÈÐÎÂÊÓ ÄËß MS Windows Netscape- Mail, Ñ ÏÅÐÅÊÎÄÈÐÎÂÊÎÉ win<->koi8. òÀÊ ÆÅ ÐÅÄÈÐÅÊÒÎÐ ÌÎÆÅÒ ÏÅÐÅÊÎÄÈÐÎÂÀÒÜ íÜÞÑÛ È WWW ÑÒÐÀÍÈÖÛ ÄËß âÈÍÄÞÊÎÂÛÉÕ ÊËÈÅÍÒÎÂ. =========================================================================== 0. â Netscape-Mail ÏÎÐÒ ÑÅÐÂÅÐÀ ÏÅÐÅÍÀÇÍÀ×ÀÅÒÑß ÒÀÊ: Options-> Mail and News Preferences-> Server-> Mail server mailhost:2025 Options-> Mail and News Preferences-> Server-> Pop3 server pop3host:2110 èËÈ ÏÐßÌÎ Â ÔÀÉËÅ preference: MAILHOST: smtphost:2025 POP3_HOST: pop3host:2110 # ïÐÈÌÅ×ÀÍÈÅ ÂÈÄÈÌÎ ÂÀÌ ÇÀÕÎ×ÅÒÑß ÍÀÏÈÑÀÒÜ ÑÈÌÂÎËÈ×ÅÑÊÈÅ ÈÌÅÍÀ ÏÎÐÒΠ- ÒÈÏÀ # # MAILHOST: smtphost:smtpwin # POP3_HOST: pop3host:pop3win # # # ïÎÏÐÎÁÓÉÒÅ, ÌÎÆÅÒ ÁÛÒÜ ÂÀÌ ÏÎÂÅÇÅÒ. íÎ Ó ÌÅÍß ÍÀ Linux'Å # Netscape ÐÀÑÏÎÇÍÀË ÒÎËÜÊÎ ÖÈÔÐÎÂÛÅ ÇÍÀ×ÅÍÈß ÏÎÐÒΠóñòàíîâêà ðåäèðåêòîðà íà Unix host'Å 1. â ÔÀÉË ¡ /etc/services ÂÏÈÑÀÒÜ ÑÒÐÎ×ÊÈ pop3win 2110/tcp # Perekodirowsik porta pop3 smtpwin 2025/tcp # Perekodirowsik porta smtp nntpwin 2119/tcp # Perekodirowsik porta nntp httpwin 2080/tcp # Perekodirowsik porta http pop3alt 3110/tcp # Perekodirowsik porta pop3 smtpalt 3025/tcp # Perekodirowsik porta smtp nntpalt 3119/tcp # Perekodirowsik porta nntp httpalt 3080/tcp # Perekodirowsik porta http 2. â ÔÀÉË ¡ /etc/inetd.conf ÂÏÈÑÀÒÜ ÑÒÐÎ×ÊÈ smtpwin stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p smtp -c win -t 1600 pop3win stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p pop3 -c win -t 1600 nntpwin stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p nntp -c win -t 1600 httpwin stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p 80 -c win -t 3600 smtpalt stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p smtp -c alt -t 1600 pop3alt stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p pop3 -c alt -t 1600 nntpalt stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p nntp -c alt -t 1600 httpalt stream tcp nowait root /usr/local/bin/redirector redirector -h localhost -p 80 -c alt -t 3600 # êÎÌÌÅÍÒÀÐÈÈ Ê ÏÐÎÃÐÀÌÌÅ ÍÀÏÈÑÀË ìÀÊÑÈÌ ìÎØÊÎÂ. 15 ÌÀß 1996 # */ #include #include #include #include #include #include #include #include #include #include #define BUFLEN 1024 #define USAGE "redirect -h host -p port [ -t timeout ] [ -c {alt|win} ] [ -S script ] \n" #define ALT 1 #define WIN 2 int ppid, pid; int tcp_conn (host_name, port_name) char *host_name; char *port_name; { int fd; struct sockaddr_in port; struct hostent *h; struct servent *serv; ushort port_number; port.sin_family = AF_INET; if (*host_name>='0' && *host_name<='9') { port.sin_addr.s_addr = inet_addr(host_name); } else { h = gethostbyname(host_name); if (!h) { printf("%s: unknown host\n", host_name); return -1; } port.sin_addr = *((struct in_addr *) h->h_addr); } if (*port_name>='0' && *port_name<='9') port.sin_port=htons (atoi(port_name)); else { serv=getservbyname(port_name,(char*)0); if (serv) port.sin_port=serv->s_port; else { printf ("unknown service"); return -1; } } fd = socket (AF_INET, SOCK_STREAM, 0); if (fd < 0) return -1; if (connect (fd, (struct sockaddr *) &port, sizeof port) < 0) return -1; return fd; } void sig_kill() { kill(ppid, SIGTERM); exit(0); } void sig_alrm() { termin(); } void sig_alrm1() { exit(0); } extern char *optarg; main (argc,argv) char *argv[]; int argc; { int fd, i,j,br,bw,bread; fd_set rready,wready,rt,wt; struct timeval tv; char ch; char *arg,*cp; FILE *ni,*no; char buf[256]; unsigned char netbuf[BUFLEN]; int option, timeout = 0; static char host[200]; static char port[100]; int convert = 0, nparm = 1, script = 0; while ((option = getopt( argc, argv, "h:p:t:Sc:?Hh")) != EOF) { switch ( option ) { case 'h': strcpy(host, optarg); nparm+=2; break; case 'p': strcpy(port, optarg); nparm+=2; break; case 't': timeout = atoi(optarg); nparm+=2; break; case 'S': script = 1; nparm++; break; case 'c' : if (strcasecmp("alt", optarg)==0) convert = ALT; if (strcasecmp("win", optarg) == 0) convert = WIN; nparm+=2; break; default: fprintf(stderr, "%s\n", USAGE); exit(0); } } ppid = getpid(); signal(SIGTERM, ( void (*)())sig_kill); signal(SIGHUP, ( void (*)())sig_kill); signal(SIGQUIT, ( void (*)())sig_kill); signal(SIGINT, ( void (*)())sig_kill); if ((fd=tcp_conn(host, port))==-1) { perror ("Can't connect"); exit(-1) ; } if (script == 1) { for (i=nparm;i=0) { printf ("Got:%s\n",buf); fflush (stdout); if ((cp=strstr(buf,argv[i]))!=NULL) { printf ("Got it\n"); goto write; } else { printf ("Not expected\n"); exit (-1); } } write: ; i++; if (i127) *(buff+i) = koi82alt[*(buff+i)-128]; } return 0; } int win_koi(unsigned char *buff, int len) { int i, j; for (i = 0; i < len; i++) { if ( (*(buff+i) >127) && (win2koi8[*(buff+i) - 128] != 0) ) *(buff+i) = win2koi8[*(buff+i)-128]; } return 0; } int koi_win(unsigned char *buff, int len) { int i, j; for (i = 0; i < len; i++) { if ( (*(buff+i) >127) && (koi82win[*(buff+i) - 128] != 0) ) *(buff+i) = koi82win[*(buff+i)-128]; } return 0; } int alt_koi(unsigned char *buff, int len) { int i, j; for (i = 0; i < len; i++) { if (*(buff+i) >127) *(buff+i) = alt2koi8[*(buff+i)-128]; } return 0; } /* main(int argc, char *argv[]) { unsigned char str[200]; while (gets(str) != NULL) { if (argc == 2 ) { koi_alt(str, strlen(str)); printf("%s\n", str); } else { alt_koi(str, strlen(str)); printf("%s\n", str); } } } */