Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* $Id$ */
- /* public domain */
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <errno.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void
- usage()
- {
- extern char *__progname;
- (void)fprintf(stderr, "usage: %s addr\n", __progname);
- exit(1);
- }
- int
- main(int argc, char **argv)
- {
- struct in_addr in4;
- struct in6_addr in6;
- char addr4[INET_ADDRSTRLEN];
- char addr6[INET6_ADDRSTRLEN];
- void *in;
- char *addr;
- int af;
- socklen_t len;
- int valid;
- if (argc != 2)
- usage();
- /* NOTREACHED */
- if (strchr(argv[1], ':')) {
- /* IPv6 */
- in = &in6;
- addr = addr6;
- af = AF_INET6;
- len = INET6_ADDRSTRLEN;
- } else {
- /* IPv4 */
- in = &in4;
- addr = addr4;
- af = AF_INET;
- len = INET_ADDRSTRLEN;
- }
- valid = inet_pton(af, argv[1], in);
- switch (valid) {
- case 1: /* ok, pretty print */
- if (!inet_ntop(af, in, addr, len))
- addr = strerror(errno);
- break;
- case 0: /* not ok, just echo */
- addr = argv[1];
- break;
- default: /* error */
- addr = strerror(errno);
- break;
- }
- printf("%svalid IPv%d address: %s\n",
- valid ? "" : "in",
- af == AF_INET ? 4 : 6,
- addr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement