需要帮助理解 C 程序来查找机器的 IP 地址

发布于 2024-09-11 00:15:27 字数 967 浏览 8 评论 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);
      }

I am not getting this assignment about finding the IP address of the machine. I need help understanding the logic of this code. Our college lab uses proxy server; will this code work on a computer without proxy?

      #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);
      }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吃不饱 2024-09-18 00:15:27

这里感兴趣的 2 个关键方法是:

  1. gethostbyname() - gethostbyname 函数检索主机信息
  2. inet_ntoa - 转换ip add to in_addr

尝试具体一点,您在理解代码时遇到问题的地方。

该代码适用于我。

$./a.out nslookup

返回主机 IP。

The 2 key methods of interest here are:

  1. gethostbyname() - The gethostbyname function retrieves host information
  2. inet_ntoa - convert ip add to in_addr

Try to be specific, where are you having problem understanding the code.

The code works with me.

$./a.out nslookup

returns host ip.

脱离于你 2024-09-18 00:15:27

netdb.h - 网络数据库操作的定义
arpa/inet.h - 互联网操作的定义
netinet/in.h - 互联网地址系列
gethostname() 函数返回当前计算机的标准主机名。
inet_ntoa(h_addr) 将 IP 地址从 32 位网络格式转换回点分十进制。

这些是基本的理解术语。最重要的是使用 google 了解详细信息。

netdb.h - definitions for network database operations
arpa/inet.h - definitions for internet operations
netinet/in.h - Internet address family
The gethostname() function returns the standard host name for the current machine.
inet_ntoa(h_addr) To convert an IP address from 32-bit network format back to dotted decimal.

These are the basic understanding terms. Most importantly use google for detail.

后知后觉 2024-09-18 00:15:27

实际上,gethostbyname 函数执行一个 DNS 请求,该请求返回 hostent 结构字段。
使用wireshark 嗅探网络来查看流量可能会很有趣。

Actually, the gethostbyname function performs a DNS request which returns the hostent structure filed.
It could be interesting for you to snif the network with wireshark for instance to look what the traffic looks like.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文