+++ /dev/null
-#include <stdio.h>
-#include <unistd.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#define DBG 0
-
-int parseparams(int argc, char *argv[], ulong *adres, uint *rport, uint *lport, uint *service)
-{
- char *s;
- uint c, d;
-
- if (argc<1) return 255;
-
- *lport=80;
- *service=113;
-
- switch (argc)
- {
- case 2:
- fprintf(stderr,"Error: missing remote port!\n");
- case 1:
- fprintf(stderr,"Usage: ident <xxx.xxx.xxx.xxx> <remote port> [local port] [ident port]\n");
- return 1;
- default:
- case 5:
- c=0;
- s=argv[4];
- while (*s)
- {
- if (c<65536 && *s>='0' && *s<='9') c=c*10+*s-'0';
- else
- {
- fprintf(stderr,"Error: wrong ident port!\n");
- return 5;
- }
- s++;
- }
- *service=c;
- case 4:
- c=0;
- s=argv[3];
- while (*s)
- {
- if (c<65536 && *s>='0' && *s<='9') c=c*10+*s-'0';
- else
- {
- fprintf(stderr,"Error: wrong local port!\n");
- return 4;
- }
- s++;
- }
- *lport=c;
- case 3:
- *adres=0;
- c=d=0;
- s=argv[1];
- while (*s)
- {
- if (*s>='0' && *s<='9')
- {
- c=c*10+*s-'0';
- if (c>255)
- {
- fprintf(stderr,"Error: wrong address!\n");
- return 2;
- }
- }
- else
- if (*s=='.')
- {
- *adres=*adres*256+c;
- c=0;
- if (d++>=3)
- {
- fprintf(stderr,"Error: wrong address!\n");
- return 2;
- }
- }
- else
- {
- fprintf(stderr,"Error: wrong address!\n");
- return 2;
- }
- s++;
- }
- *adres=*adres*256+c;
-
- c=0;
- s=argv[2];
- while (*s)
- {
- if (c<65536 && *s>='0' && *s<='9') c=c*10+*s-'0';
- else
- {
- fprintf(stderr,"Error: wrong remote port!\n");
- return 3;
- }
- s++;
- }
- *rport=c;
- }
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- int sock;
- struct sockaddr_in addr;
- char buf[256];
- int count;
- ulong adres;
- uint rport, lport, service;
- int err;
- static const int val_one=1;
-
- if (parseparams(argc,argv,&adres,&rport,&lport,&service)) return 3;
-
- if (DBG) fprintf(stderr,"addr: %lX rport: %u lport: %u service: %i\n",adres,rport,lport,service);
-
- addr.sin_family=AF_INET;
- addr.sin_addr.s_addr=htonl(adres);
- addr.sin_port=htons(service);
-
- sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
- setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,&val_one,sizeof(val_one));
-
- if (DBG)
- {
- err=errno;
- fprintf(stderr,"socket: %i, errno: %i\n",sock,err);
- }
- if (sock==-1)
- {
- fprintf(stderr,"Error: cannot create socket!\n");
- return 4;
- }
-
- count=connect(sock,(struct sockaddr*)&addr,sizeof(addr));
- if (DBG)
- {
- err=errno;
- fprintf(stderr,"connect: %i, errno: %i\n",count,err);
- }
-
- if (count)
- {
- fprintf(stderr,"Error: connection failed!\n");
- return 5;
- }
-
- count=snprintf(buf,sizeof(buf),"%d , %d\n",rport,lport);
- if (count==-1) return 1;
- if (write(sock,buf,count)!=count) return 2;
-
- for (;;)
- {
- count=read(sock,buf,sizeof(buf)-1);
- if (count<=0) break;
- buf[count]=0;
- printf("%s",buf);
- fflush(stdout);
- }
-
- if (DBG) fprintf(stderr,"count = %d , errno = %d\n",count,errno);
- close(sock);
- return 0;
-}
-