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