1*1285115cSWilliam A. Kennington III /* 2*1285115cSWilliam A. Kennington III * Copyright 2021 Google LLC 3*1285115cSWilliam A. Kennington III * 4*1285115cSWilliam A. Kennington III * Licensed under the Apache License, Version 2.0 (the "License"); 5*1285115cSWilliam A. Kennington III * you may not use this file except in compliance with the License. 6*1285115cSWilliam A. Kennington III * You may obtain a copy of the License at 7*1285115cSWilliam A. Kennington III * 8*1285115cSWilliam A. Kennington III * http://www.apache.org/licenses/LICENSE-2.0 9*1285115cSWilliam A. Kennington III * 10*1285115cSWilliam A. Kennington III * Unless required by applicable law or agreed to in writing, software 11*1285115cSWilliam A. Kennington III * distributed under the License is distributed on an "AS IS" BASIS, 12*1285115cSWilliam A. Kennington III * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*1285115cSWilliam A. Kennington III * See the License for the specific language governing permissions and 14*1285115cSWilliam A. Kennington III * limitations under the License. 15*1285115cSWilliam A. Kennington III */ 16*1285115cSWilliam A. Kennington III 17*1285115cSWilliam A. Kennington III #include <arpa/inet.h> 18*1285115cSWilliam A. Kennington III #include <stdio.h> 19*1285115cSWilliam A. Kennington III 20*1285115cSWilliam A. Kennington III int main(int argc, char* argv[]) 21*1285115cSWilliam A. Kennington III { 22*1285115cSWilliam A. Kennington III if (argc < 1) 23*1285115cSWilliam A. Kennington III { 24*1285115cSWilliam A. Kennington III return 1; 25*1285115cSWilliam A. Kennington III } 26*1285115cSWilliam A. Kennington III if (argc != 2) 27*1285115cSWilliam A. Kennington III { 28*1285115cSWilliam A. Kennington III fprintf(stderr, "Usage: %s <ip address>\n", argv[0]); 29*1285115cSWilliam A. Kennington III return 1; 30*1285115cSWilliam A. Kennington III } 31*1285115cSWilliam A. Kennington III 32*1285115cSWilliam A. Kennington III union 33*1285115cSWilliam A. Kennington III { 34*1285115cSWilliam A. Kennington III struct in_addr in; 35*1285115cSWilliam A. Kennington III struct in6_addr in6; 36*1285115cSWilliam A. Kennington III } buf; 37*1285115cSWilliam A. Kennington III int af = AF_INET6; 38*1285115cSWilliam A. Kennington III if (inet_pton(af, argv[1], &buf) != 1) 39*1285115cSWilliam A. Kennington III { 40*1285115cSWilliam A. Kennington III af = AF_INET; 41*1285115cSWilliam A. Kennington III if (inet_pton(af, argv[1], &buf) != 1) 42*1285115cSWilliam A. Kennington III { 43*1285115cSWilliam A. Kennington III fprintf(stderr, "Invalid IP Address: %s\n", argv[1]); 44*1285115cSWilliam A. Kennington III return 2; 45*1285115cSWilliam A. Kennington III } 46*1285115cSWilliam A. Kennington III } 47*1285115cSWilliam A. Kennington III 48*1285115cSWilliam A. Kennington III char str[INET6_ADDRSTRLEN]; 49*1285115cSWilliam A. Kennington III if (inet_ntop(af, &buf, str, sizeof(str)) == NULL) 50*1285115cSWilliam A. Kennington III { 51*1285115cSWilliam A. Kennington III return 1; 52*1285115cSWilliam A. Kennington III } 53*1285115cSWilliam A. Kennington III 54*1285115cSWilliam A. Kennington III printf("%s\n", str); 55*1285115cSWilliam A. Kennington III return 0; 56*1285115cSWilliam A. Kennington III } 57