Date: Thu, 10 Aug 95 16:34:12 -0400 From: Gary Stanny <stanny@laa.com> To: hackers@FreeBSD.ORG Cc: questions@freefall.FreeBSD.org.gary Subject: Telnet can connect to a port but I can't Message-ID: <9508102034.AA01308@handset.laa.com>
next in thread | raw e-mail | index | archive | help
I'm not sure it this question should go to questions or hackers so I am posting it to both. So network wizards from both areas please feel free to enlighten me. I am trying to use FreeBSD to write a simple protocol converter - using code straight from Stevens' book (Unix Network Programming) but I am get- ting a couple of errors. Can anyone see what I am doing wrong ? The port is listening on the remote machine (netstat says the state of the port is LISTEN) & telnet can connect to it, but my program fails to connect it. tdf_ltd >udp2tcp -i23456 -o12345 -d204.7.172.60 -a1 udp2tcp converter V1.0 udp2tcp: Can't bind TCP local address : Can't assign requested address The port is listening on the local machine & telnet can connect to it, but my program fails to connect it and I get a different error then the remote host tests. tdf_ltd >udp2tcp -i23456 -o12345 -d127.0.0.1 -a1 udp2tcp converter V1.0 udp2tcp: Can't bind TCP local address : Address already in use What does telnet do to the socket&|port that I'm not ??? /*-----------------------------------------------------------------*/ /* udp2tcp.c This program grabs a UDP packet off a target port, converts it to TCP & slams it out another port. */ #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <time.h> #include <string.h> #include <unistd.h> /*-----------------------------------------------------------------*/ int debug_flag , inputPort , outputPort , auditorNumber ; char *destAddress ; int sock_in , sock_out ; struct sockaddr_in destAddr , sourceAddr ; ARG arg_table[] = { { 'a' , INTEGER , &auditorNumber , "Auditor log file number" } , { 'd' , STRING , ( int * ) &destAddress , "Destination IP address" } , { 'i' , INTEGER , &inputPort , "Input port number" } , { 'o' , INTEGER , &outputPort , "Output port number" } , { 'D' , BOOLEAN , &debug_flag , "Runtime debug flag" } , } ; #define ARG_TABLE_SIZE ( sizeof( arg_table ) / sizeof( ARG ) ) /*-----------------------------------------------------------------*/ int main( int argc , char *argv[] ) { int new_argc , i ; new_argc = getargs( argc , argv , arg_table , ARG_TABLE_SIZE ) ; printf( "udp2tcp converter V%s\n" , VERSION_NUMBER ) ; /* open the TCP output socket */ if( ( sock_out = socket( AF_INET , SOCK_STREAM , 0 ) ) < 0 ) { perror( "udp2tcp: Can't open TCP socket " ) ; return ERR_SOCKET_OPEN_FAILURE ; } bzero( ( char * ) &destAddr , sizeof( destAddr ) ) ; destAddr.sin_family = AF_INET ; destAddr.sin_addr.s_addr = inet_addr( destAddress ) ; destAddr.sin_port = htons( outputPort ) ; if( bind( sock_out , (struct sockaddr *) &destAddr , sizeof( destAddr ) ) < 0 ) { perror( "udp2tcp: Can't bind TCP local address " ) ; return ERR_BIND_FAILURE ; } /* open the UDP input socket */ if( ( sock_in = socket( AF_INET , SOCK_DGRAM , 0 ) ) < 0 ) { perror( "udp2tcp: Can't open UDP socket " ) ; return ERR_SOCKET_OPEN_FAILURE ; } bzero( ( char * ) &sourceAddr , sizeof( sourceAddr ) ) ; sourceAddr.sin_family = AF_INET ; sourceAddr.sin_addr.s_addr = htonl( INADDR_ANY ) ; sourceAddr.sin_port = htons( inputPort ) ; if( bind( sock_in , (struct sockaddr *) &sourceAddr , sizeof( sourceAddr ) ) < 0 ) { perror( "udp2tcp: Can't bind UDP local address " ) ; return ERR_BIND_FAILURE ; } echoThePackets( sock_in ) ; return SS_NORMAL ; } /*-----------------------------------------------------------------*/ void echoThePackets( int input_sock ) { int n , n2 ; char buff[ MAX_PACKET ] , temp[ MAX_PACKET + 25 ] ; while( TRUE ) { n = recvfrom( input_sock , buff , MAX_PACKET , 0 , (struct sockaddr *) 0 , (int *) 0 ) ; if( n < 0 ) { perror( "udp2tcp: Input - recvfrom error " ) ; localExit( ERR_SOCKET_READ_ERROR ) ; } if( n == 0 ) return ; n2 = sendto( sock_out , buff , n , 0 , (struct sockaddr *) &destAddr , sizeof( destAddr) ) ; if( n2 < 0 ) { perror( "udp2tcp: Output - sendto error " ) ; localExit( ERR_SOCKET_WRITE_ERROR ) ; } } } /*-----------------------------------------------------------------*/ thanks a bunch in advance cheers gary Gary Stanny Lynn-Arthur Associates, Inc. +1 313 995 5590 stanny@laa.com Operations Support Systems +1 313 995 5989 (fax) 2350 Green Road Suite 160 Ann Arbor, MI, 48105 USA cheers gary Gary Stanny Lynn-Arthur Associates, Inc. +1 313 995 5590 stanny@laa.com Operations Support Systems +1 313 995 5989 (fax) 2350 Green Road Suite 160 Ann Arbor, MI, 48105 USA
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9508102034.AA01308>