0

マシンのIPアドレスを見つけることについてこの割り当てを取得していません。このコードのロジックを理解するのに助けが必要です。私たちの大学の研究室はプロキシサーバーを使用しています。このコードはプロキシのないコンピューターで機能しますか?

      #include <stdio.h>          /* stderr, stdout */
      #include <netdb.h>          /* hostent struct, gethostbyname() */
      #include <arpa/inet.h>      /* inet_ntoa() to format IP address */
      #include <netinet/in.h>     /* in_addr structure */

      int main(int argc, char **argv) {
        struct hostent *host;     /* host information */
        struct in_addr h_addr;    /* internet address */
        if (argc != 2) {
          fprintf(stderr, "USAGE: nslookup <inet_address>\n");
          exit(1);
        }
        if ((host = gethostbyname(argv[1])) == NULL) {
          fprintf(stderr, "(mini) nslookup failed on '%s'\n", argv[1]);
          exit(1);
        }
        h_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
        fprintf(stdout, "%s\n", inet_ntoa(h_addr));
        exit(0);
      }
4

3 に答える 3

2

ここで重要な 2 つの方法は次のとおりです。

  1. gethostbyname() - gethostbyname 関数はホスト情報を取得します
  2. inet_ntoa - ip add を in_addr に変換します

コードの理解に問題がある場所を特定してください。

コードは私と一緒に動作します。

$./a.out nslookup

ホスト IP を返します。

于 2010-07-25T17:45:47.337 に答える
1

netdb.h- ネットワーク データベース操作の arpa/inet.h定義 - インターネット操作の定義 netinet/in.h- インターネット アドレス ファミリ このgethostname()関数は、現在のマシンの標準ホスト名を返します。 inet_ntoa(h_addr) IP アドレスを 32 ビット ネットワーク形式からドット付き 10 進数に変換します。

これらは基本的な理解用語です。最も重要なことgoogleは、詳細に使用することです。

于 2010-07-26T06:51:22.913 に答える
0

実際には、gethostbyname 関数は、hostent 構造体フィールドを返す DNS 要求を実行します。たとえば、wireshark を使用してネットワークを盗聴して、トラフィックがどのように見えるかを調べることは興味深いかもしれません。

于 2010-07-25T18:06:02.413 に答える