与えられたURLまたはipのポートが開いているかどうかをチェックするプログラムを書いています。指定されたURLのIPアドレスを取得するために、私はgethostbyname()
を使用しています。 localhostのアドレスを検索しようとすると正しい値が返されますが、通常は失敗したリモートホストのアドレスを検索しようとし、負の数のIPアドレスを返します。例:gethostbyname()は、負のアドレスを持つ構造体を返します。
/test.out google.com
ip: -40.58.-42.78
/test.out reddit.com
ip: -105.101.-127.-116
./test.out facebook.com
ip: 31.13.84.36
奇妙にも、最後のものが動作します。
また#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
int main(int argc, char **argv)
{
struct hostent *he;
struct in_addr **addr_list;
if ((he = gethostbyname(argv[1])) == NULL) {
herror("gethostbyname");
return 1;
}
printf("ip: ");
for (int i = 0; i < he->h_length; i++) {
printf("%d", he->h_addr_list[0][i]);
if (i != he->h_length - 1) printf(".");
}
printf("\n");
}
、なぜh_addr_list
char **
のタイプがある:ここに私のコードは?それは整数でなくてはならないし、符号なしのものでなければならないだろうか?
おそらく文字列を印刷しようとしています。 –
アドレスを文字列に変換するには、関数inet_ntoaを使用します。 – Barmar