From: Aron Xu Date: Mon, 13 Feb 2012 15:38:15 +0800 Subject: verbose numeric port --- netcat.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) --- a/netcat.c +++ b/netcat.c @@ -43,6 +43,7 @@ #include #include #include +#include #ifdef __linux__ # include #endif @@ -651,6 +652,18 @@ main(int argc, char *argv[]) s = local_listen(host, uport, hints); if (s < 0) err(1, NULL); + + char* local; + if (family == AF_INET6) + local = "0.0.0.0"; + else if (family == AF_INET) + local = ":::"; + else + local = "unknown"; + fprintf(stderr, "Listening on [%s] (family %d, port %d)\n", + host ?: local, + family, + *uport); /* * For UDP and -k, don't connect the socket, let it * receive datagrams from multiple socket pairs. @@ -671,14 +684,14 @@ main(int argc, char *argv[]) char buf[16384]; struct sockaddr_storage z; - len = sizeof(z); + len = sizeof(cliaddr); plen = 2048; rv = recvfrom(s, buf, plen, MSG_PEEK, - (struct sockaddr *)&z, &len); + (struct sockaddr *)&cliaddr, &len); if (rv < 0) err(1, "recvfrom"); - rv = connect(s, (struct sockaddr *)&z, len); + rv = connect(s, (struct sockaddr *)&cliaddr, len); if (rv < 0) err(1, "connect");