3 ms·
Netcat is full of great comments. Here's a good one: /* I really want to strangle the twit who dreamed up all these sockaddr and hostent abstractio
by groovy2shoes 13y ago
Netcat is full of great comments. Here's a good one:
/* I really want to strangle the twit who dreamed up all these sockaddr and
hostent abstractions, and then forced them all to be incompatible with
each other so you *HAVE* to do all this ridiculous casting back and forth.
If that wasn't bad enough, all the doc insists on referring to local ports
and addresses as "names", which makes NO sense down at the bare metal.
What an absolutely horrid paradigm, and to think of all the people who
have been wasting significant amounts of time fighting with this stupid
deliberate obfuscation over the last 10 years... then again, I like
languages wherein a pointer is a pointer, what you put there is your own
business, the compiler stays out of your face, and sheep are nervous.
Maybe that's why my C code reads like assembler half the time... */
http://sourceforge.net/p/nc110/code/HEAD/tree/nc110/netcat.c http://sourceforge.net/p/nc110/code/HEAD/tree/nc110/netcat.c
- sigil 13y agonetcat.c is by far one of the most entertaining code reads out there. Because of the unix networking / portability rants -- which are sometimes informative -- and also because the Hobbit was such a strange, scatalogical creature... grep -in poop netcat.c 110:struct host_poop { 115:#define HINF struct host_poop 117:struct port_poop { 122:#define PINF struct port_poop 163:HINF ** gates = NULL; /* LSRR hop hostpoop */ 169:PINF * portpoop = NULL; /* for getportpoop / getservby* */ 336: cross-check the host_poop we have so far against new gethostby*() info, 340:int comparehosts (poop, hp) 341: HINF * poop; 349: if (strcmp (poop->name, hp->h_name) != 0) { /* case-sensitive */ 351: if (strcasecmp (poop->name, hp->h_name) != 0) { /* normal */ 353: holler ("DNS fwd/rev mismatch: %s != %s", poop->name, hp->h_name); 360:/* gethostpoop : 361: resolve a host 8 ways from sunday; return a new host_poop struct with its 365:HINF * gethostpoop (name, numeric) 371: register HINF * poop = NULL; 397: poop = (HINF *) Hmalloc (sizeof (HINF)); 398: if (! poop) 399: bail ("gethostpoop fuxored"); 400: strcpy (poop->name, unknown); /* preload it */ 411: strncpy (poop->name, hostent->h_name, MAXHOSTNAMELEN - 2); 413: memcpy (&poop->iaddrs[x], hostent->h_addr_list[x], sizeof (IA)); 414: strncpy (poop->addrs[x], inet_ntoa (poop->iaddrs[x]), 415: sizeof (poop->addrs[0])); 418: return (poop); /* inverse stuff, we're done. */ 421: for (x = 0; poop->iaddrs[x].s_addr && (x < 8); x++) { 422: hostent = gethostbyaddr ((char *)&poop->iaddrs[x], 426: poop->addrs[x]); 428: (void) comparehosts (poop, hostent); 432: memcpy (poop->iaddrs, &iaddr, sizeof (IA)); 433: strncpy (poop->addrs[0], inet_ntoa (iaddr), sizeof (poop->addrs)); 435: return (poop); 437: return (poop); /* the full DNS hair */ 443: strncpy (poop->name, hostent->h_name, MAXHOSTNAMELEN - 2); 444: hostent = gethostbyname (poop->name); 447: poop->name); 449: (void) comparehosts (poop, hostent); 453:/* whatever-all went down previously, we should now have a host_poop struct 456: return (poop); 457:} /* gethostpoop */ 459:/* getportpoop : 460: Same general idea as gethostpoop -- look up a port in /etc/services, fill 461: in global port_poop, but return the actual port *number*. Pass ONE of: 466:USHORT getportpoop (pstring, pnum) 476: portpoop->name[0] = '?'; /* fast preload */ 477: portpoop->name[1] = '\0'; 495: strncpy (portpoop->name, servent->s_name, sizeof (portpoop->name)); 509: return (getportpoop (NULL, x)); /* recurse for numeric-string-arg */ 514: strncpy (portpoop->name, servent->s_name, sizeof (portpoop->name)); 536: sprintf (portpoop->anum, "%d", x); /* always load any numeric specs! */ 537: portpoop->num = (x & 0xffff); /* ushort, remember... */ 538: return (portpoop->num); 539:} /* getportpoop */ 994: gethostpoop wants a string and there's much gnarlier code out there already, 1002: whozis = gethostpoop (bigbuf_net, o_nflag); 1451: portpoop = (PINF *) Hmalloc (sizeof (PINF)); 1545: gp = gethostpoop (optarg, o_nflag); 1572: o_lport = getportpoop (optarg, 0); 1584: wherefrom = gethostpoop (optarg, o_nflag); 1654: whereto = gethostpoop (argv[optind], o_nflag); 1669: curport = getportpoop (argv[optind], 0); 1713: hiport = getportpoop (cp, 0); 1719: loport = getportpoop (argv[optind], 0); 1740: curport = getportpoop (NULL, curport); 1749: whereto->name, whereto->addrs[0], curport, portpoop->name); 1768: whereto->name, whereto->addrs[0], curport, portpoop->name);