11285115cSWilliam A. Kennington III /*
21285115cSWilliam A. Kennington III  * Copyright 2021 Google LLC
31285115cSWilliam A. Kennington III  *
41285115cSWilliam A. Kennington III  * Licensed under the Apache License, Version 2.0 (the "License");
51285115cSWilliam A. Kennington III  * you may not use this file except in compliance with the License.
61285115cSWilliam A. Kennington III  * You may obtain a copy of the License at
71285115cSWilliam A. Kennington III  *
81285115cSWilliam A. Kennington III  *      http://www.apache.org/licenses/LICENSE-2.0
91285115cSWilliam A. Kennington III  *
101285115cSWilliam A. Kennington III  * Unless required by applicable law or agreed to in writing, software
111285115cSWilliam A. Kennington III  * distributed under the License is distributed on an "AS IS" BASIS,
121285115cSWilliam A. Kennington III  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131285115cSWilliam A. Kennington III  * See the License for the specific language governing permissions and
141285115cSWilliam A. Kennington III  * limitations under the License.
151285115cSWilliam A. Kennington III  */
161285115cSWilliam A. Kennington III 
171285115cSWilliam A. Kennington III #include <arpa/inet.h>
18*adb8ffe4SWilly Tu #include <netinet/in.h>
191285115cSWilliam A. Kennington III #include <stdio.h>
20*adb8ffe4SWilly Tu #include <sys/socket.h>
211285115cSWilliam A. Kennington III 
main(int argc,char * argv[])221285115cSWilliam A. Kennington III int main(int argc, char* argv[])
231285115cSWilliam A. Kennington III {
241285115cSWilliam A. Kennington III     if (argc < 1)
251285115cSWilliam A. Kennington III     {
261285115cSWilliam A. Kennington III         return 1;
271285115cSWilliam A. Kennington III     }
281285115cSWilliam A. Kennington III     if (argc != 2)
291285115cSWilliam A. Kennington III     {
301285115cSWilliam A. Kennington III         fprintf(stderr, "Usage: %s <ip address>\n", argv[0]);
311285115cSWilliam A. Kennington III         return 1;
321285115cSWilliam A. Kennington III     }
331285115cSWilliam A. Kennington III 
341285115cSWilliam A. Kennington III     union
351285115cSWilliam A. Kennington III     {
361285115cSWilliam A. Kennington III         struct in_addr in;
371285115cSWilliam A. Kennington III         struct in6_addr in6;
381285115cSWilliam A. Kennington III     } buf;
391285115cSWilliam A. Kennington III     int af = AF_INET6;
401285115cSWilliam A. Kennington III     if (inet_pton(af, argv[1], &buf) != 1)
411285115cSWilliam A. Kennington III     {
421285115cSWilliam A. Kennington III         af = AF_INET;
431285115cSWilliam A. Kennington III         if (inet_pton(af, argv[1], &buf) != 1)
441285115cSWilliam A. Kennington III         {
451285115cSWilliam A. Kennington III             fprintf(stderr, "Invalid IP Address: %s\n", argv[1]);
461285115cSWilliam A. Kennington III             return 2;
471285115cSWilliam A. Kennington III         }
481285115cSWilliam A. Kennington III     }
491285115cSWilliam A. Kennington III 
501285115cSWilliam A. Kennington III     char str[INET6_ADDRSTRLEN];
511285115cSWilliam A. Kennington III     if (inet_ntop(af, &buf, str, sizeof(str)) == NULL)
521285115cSWilliam A. Kennington III     {
531285115cSWilliam A. Kennington III         return 1;
541285115cSWilliam A. Kennington III     }
551285115cSWilliam A. Kennington III 
561285115cSWilliam A. Kennington III     printf("%s\n", str);
571285115cSWilliam A. Kennington III     return 0;
581285115cSWilliam A. Kennington III }
59