1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
--- bounce.c.orig Mon May 28 09:07:37 2007
+++ bounce.c Mon May 28 09:08:41 2007
@@ -138,7 +138,7 @@
}
int main(int argc,char *argv[]) {
- int srv_fd, rem_fd, len, cl_fd, on=1, b=0;
+ int srv_fd, rem_fd, len, cl_fd, on=1, b=0, d=0;
int myport=DEFAULT_PORT, remoteport;
struct sockaddr_in rem_addr, srv_addr, cl_addr;
char *myname;
@@ -153,9 +153,10 @@
/* Process arguments */
- while( (ch = getopt(argc, argv, "p:a:b:")) != -1 ) {
+ while( (ch = getopt(argc, argv, "p:a:b:d")) != -1 ) {
switch(ch) {
case 'b': b = 1;
+ case 'd': d = 1; break;
case 'a':
hostname = malloc( strlen(optarg) + 1);
if( !hostname ) {
@@ -178,7 +179,7 @@
argv += optind;
if (argc!=2) {
- fprintf(stderr,"Use: %s [-a localaddr | -b localaddr] [-p localport] machine port \n",myname);
+ fprintf(stderr,"Use: %s [-a localaddr | -b localaddr] [-p localport] [-d] machine port \n",myname);
exit(-1);
}
if ((remoteport=atoi(argv[1]))<=0) {
@@ -261,6 +262,11 @@
if (bind(cl_fd,(struct sockaddr *)&srv_addr,sizeof(srv_addr))<0) {
close(rem_fd);
exit(-1);
+ }
+ }
+ if (d) {
+ if ((hp=gethostbyname(argv[0]))!=NULL) {
+ cl_addr.sin_addr=*(struct in_addr *)(hp->h_addr_list[0]);
}
}
if (connect(cl_fd, (struct sockaddr *)&cl_addr,
|