source: npl/overig/netcat_openbsd/patches/0008-verbose-numeric-port.patch @ 51c3d1a

perl-5.22
Last change on this file since 51c3d1a was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100644
File size: 3.2 KB
  • netcat.c

    From: Aron Xu <aron@debian.org>
    Date: Mon, 13 Feb 2012 15:38:15 +0800
    Subject: verbose numeric port
    
    ---
     netcat.c |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----
     1 file changed, 55 insertions(+), 4 deletions(-)
    
    diff --git a/netcat.c b/netcat.c
    index baab909..eb3453e 100644
    a b  
    4141#include <netinet/tcp.h>
    4242#include <netinet/ip.h>
    4343#include <arpa/telnet.h>
     44#include <arpa/inet.h>
    4445
    4546#ifndef IPTOS_LOWDELAY
    4647# define IPTOS_LOWDELAY 0x10
    main(int argc, char *argv[]) 
    424425                                s = local_listen(host, uport, hints);
    425426                        if (s < 0)
    426427                                err(1, NULL);
     428
     429                        char* local;
     430                        if (family == AF_INET6
     431                                local = "0.0.0.0";
     432                        else if (family == AF_INET)
     433                                local = ":::";
     434                        else
     435                                local = "unknown"
     436                        fprintf(stderr, "Listening on [%s] (family %d, port %d)\n",
     437                                host ?: local,
     438                                family,
     439                                *uport);
    427440                        /*
    428441                         * For UDP, we will use recvfrom() initially
    429442                         * to wait for a caller, then use the regular
    main(int argc, char *argv[]) 
    432445                        if (uflag) {
    433446                                int rv, plen;
    434447                                char buf[16384];
    435                                 struct sockaddr_storage z;
    436448
    437                                 len = sizeof(z);
     449                                len = sizeof(cliaddr);
    438450                                plen = jflag ? 16384 : 2048;
    439451                                rv = recvfrom(s, buf, plen, MSG_PEEK,
    440                                     (struct sockaddr *)&z, &len);
     452                                    (struct sockaddr *)&cliaddr, &len);
    441453                                if (rv < 0)
    442454                                        err(1, "recvfrom");
    443455
    444                                 rv = connect(s, (struct sockaddr *)&z, len);
     456                                rv = connect(s, (struct sockaddr *)&cliaddr, len);
    445457                                if (rv < 0)
    446458                                        err(1, "connect");
    447459
    main(int argc, char *argv[]) 
    450462                                len = sizeof(cliaddr);
    451463                                connfd = accept(s, (struct sockaddr *)&cliaddr,
    452464                                    &len);
     465                                if(vflag) {
     466                                /* Don't look up port if -n. */
     467                                        if (nflag)
     468                                                sv = NULL;
     469                                        else
     470                                                sv = getservbyport(ntohs(atoi(uport)),
     471                                                        uflag ? "udp" : "tcp");
     472
     473                                        if (((struct sockaddr *)&cliaddr)->sa_family == AF_INET) {
     474                                                char dst[INET_ADDRSTRLEN];
     475                                                inet_ntop(((struct sockaddr *)&cliaddr)->sa_family,&(((struct sockaddr_in *)&cliaddr)->sin_addr),dst,INET_ADDRSTRLEN);
     476                                                fprintf(stderr, "Connection from [%s] port %s [%s/%s] accepted (family %d, sport %d)\n",
     477                                                        dst,
     478                                                        uport,
     479                                                        uflag ? "udp" : "tcp",
     480                                                        sv ? sv->s_name : "*",
     481                                                        ((struct sockaddr *)(&cliaddr))->sa_family,
     482                                                        ntohs(((struct sockaddr_in *)&cliaddr)->sin_port));
     483                                        }
     484                                        else if(((struct sockaddr *)&cliaddr)->sa_family == AF_INET6) {
     485                                                char dst[INET6_ADDRSTRLEN];
     486                                                inet_ntop(((struct sockaddr *)&cliaddr)->sa_family,&(((struct sockaddr_in6 *)&cliaddr)->sin6_addr),dst,INET6_ADDRSTRLEN);
     487                                                fprintf(stderr, "Connection from [%s] port %s [%s/%s] accepted (family %d, sport %d)\n",
     488                                                        dst,
     489                                                        uport,
     490                                                        uflag ? "udp" : "tcp",
     491                                                        sv ? sv->s_name : "*",
     492                                                        ((struct sockaddr *)&cliaddr)->sa_family,
     493                                                        ntohs(((struct sockaddr_in6 *)&cliaddr)->sin6_port));
     494                                        }
     495                                        else {
     496                                                fprintf(stderr, "Connection from unknown port %s [%s/%s] accepted (family %d, sport %d)\n",
     497                                                        uport,
     498                                                        uflag ? "udp" : "tcp",
     499                                                        sv ? sv->s_name : "*",
     500                                                        ((struct sockaddr *)(&cliaddr))->sa_family,
     501                                                        ntohs(((struct sockaddr_in *)&cliaddr)->sin_port));
     502                                        }
     503                                }
    453504                                readwrite(connfd);
    454505                                close(connfd);
    455506                        }
Note: See TracBrowser for help on using the repository browser.