【问题标题】:inet_ntop() not printing urlinet_ntop() 不打印网址
【发布时间】:2021-02-13 04:19:28
【问题描述】:

我相信 inet_ntop() 应该将 struct sockaddr 地址转换为字符串,目前我有:

 sin_size = sizeof their_addr;

 new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);

 inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)&their_addr)->sin6_addr), s, sizeof s);

 printf("server: got connection from %s\n", s);

如果我从 http://localhost:3490/thispage.html 建立连接,我希望代码能够打印出来 http://localhost:3490/thispage.html 但它打印出来的只是“服务器:从 ::1 获得连接”。

我不明白为什么会这样——基本上我想做的是从 url 中获取 html 页面名称,我想从返回的字符串中提取它,但字符串没有返回我原来的样子预计。

【问题讨论】:

  • 你的期望是错误的。这仅处理 IP 和 IPv6 地址,与 URL 无关。
  • 听起来您正在寻找的是 HTTP Referer: 标头。
  • 你知道我如何在 c 程序中得到它吗?
  • 如果 C 程序作为 Web 服务器,它需要读取 HTTP 标头。

标签: c sockets server network-programming


【解决方案1】:

inet_ntop 函数采用包含 IP 地址的结构并将其转换为字符串格式。它对 URL 一无所知。

accept 返回时,此时发生的只是建立了一个 TCP 连接,并且their_addr 包含连接的端点的 IP 地址,在本例中为 ::1,即打印的内容。

您需要进一步阅读可能包含 HTTP 的套接字,以了解调用了什么 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多