前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >15.1 套接字通过域名取IP地址

15.1 套接字通过域名取IP地址

原创
作者头像
王瑞MVP
发布于 2023-10-17 01:34:32
发布于 2023-10-17 01:34:32
59500
代码可运行
举报
运行总次数:0
代码可运行

首先我们来实现一个DNS查询功能,该功能的目的是传入一个网站域名自动将该域名解析为对应的IP地址,该功能的实现依赖于gethostbyname函数,该函数将主机名作为参数,并返回一个指向hostent类型结构的指针,结构包含有关主机的信息。结构包含许多字段,其中最重要的是h_nameh_addr_listh_name是主机名,h_addr_list是一个指向具有主机IP地址的地址列表的指针。

hostent 是一个结构体,用于存储主机的基本信息,包括主机名、主机别名、IP 地址类型和地址列表等。

它的定义一般类似于以下:

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
struct hostent {
   char  *h_name;            /* 官方主机名 */
   char **h_aliases;         /* 主机别名 */
   int    h_addrtype;        /* IP地址类型(IPv4或IPv6)*/
   int    h_length;          /* IP地址长度 */
   char **h_addr_list;       /* IP地址列表 */
};

其中,h_name字段是主机的官方名称,h_aliases字段是一个指向主机别名列表的指针,h_addrtype 字段指示地址类型(通常是 AF_INETAF_INET6),h_length 字段是地址长度(通常为 4 或 16 字节),h_addr_list 字段是一个指向 IP 地址列表的指针。在 IPv4 中,h_addr_list 指向一个由网络字节顺序的 4 字节整数(即 IPv4 地址)组成的数组,而在 IPv6 中则是指向由 16 字节无符号整数组成的数组(即 IPv6 地址)。

代码语言:c
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <WinSock2.h>
#include <IPHlpApi.h>
#include <IcmpAPI.h>

#pragma comment (lib,"iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

// 传入域名返回该域名对应IP地址
CHAR* GetHostByName(char * HostName)
{
  WSADATA wsaData;
  if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
  {
    return "None";
  }

  // 获取当前主机结构体信息
  struct hostent *ptr = gethostbyname(HostName);
  if (!ptr)
  {
    return "None";
  }

  // 解析地址类型
  printf("地址类型: %s \n", (ptr->h_addrtype == AF_INET) ? "IPV4" : "IPV6");

  // 解析别名
  for (int i = 0; ptr->h_aliases[i]; i++)
  {
    printf("别名 [%d]: %s \n", i + 1, ptr->h_aliases[i]);
  }

  // 解析IP地址列表
  for (int i = 0; ptr->h_addr_list[i]; i++)
  {
    printf("IP地址 [%d]: %s \n", i + 1, inet_ntoa(*(struct in_addr*)ptr->h_addr_list[i]));
  }

  WSACleanup();

  if (ptr)
  {
    in_addr inAddr;
    ULONG addr = *(u_long *)ptr->h_addr_list[0];
    inAddr.s_addr = addr;

    // 返回IP地址
    return inet_ntoa(inAddr);
  }

  return "None";
}

int main(int argc, char *argv[])
{
  char * HostAddress = GetHostByName("www.lyshark.com");
  printf("网站IP地址 = %s \n", HostAddress);
  system("pause");
  return 0;
}

本文作者: 王瑞

本文链接: https://www.lyshark.com/post/1fe8454e.html

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【现代深度学习技术】循环神经网络03:语言模型和数据集
  在文本预处理中,我们了解了如何将文本数据映射为词元,以及将这些词元可以视为一系列离散的观测,例如单词或字符。假设长度为
Francek Chen
2025/04/17
1100
【现代深度学习技术】循环神经网络03:语言模型和数据集
神经语言模型
什么是语言模型?通俗的来讲是判断一句话是否符合人说话的模型,如可以说”猫有四条腿“,却不能说”四条腿有猫“。因为”四条腿有猫“这样的表述不符合人们的正常语言规范。在语言模型的发展过程中,分别出现了专家语法规则模型,统计语言模型,神经网络语言模型三个阶段。其中,专家语法规则模型出现在语言模型的初始阶段,我们知道,每一种语言都有其特定的语法规则,因此在早期,人们设法通过归纳出的语法规则来对语言建模;统计语言模型则是对句子的概率分布建模,通过对大量语料的统计发现,符合人们正常语言规范的句子出现的概率要大于不符合语言规范的句子,如上述的“猫有四条腿”出现的概率要大于“四条腿有猫”的概率;神经网络语言模型是在统计语言模型的基础上,通过神经网络模型对句子的概率分布建模的方法。下面将从统计语言模型开始讲起。
felixzhao
2022/01/05
3620
神经语言模型
大语言模型--评价指标
衡量语言建模能力的重要指标,通过计算给定文本序列概率的倒数的几何平均,来衡量模型对于语言的建模能力。基础公式如下:
aaronwjzhao
2024/06/11
7400
自然语言处理:语言模型与评价方法
假设一门语言中所有可能的句子服从某一个概率分布,每个句子出现的概率加起来为1,那么“语言模型”的任务就是预测每个句子在语言中出现的概率。对于语言中常见的句子,一个好的语言模型应得出相对较高的概率;而对于不合语法的句子,计算出的概率则应接近于零。把句子看成单词的序列,语言模型可以表示为一个计算p(w1,w2,w3,…,wm)的模型。语言模型仅仅对句子出现的概率进行建模,并不尝试去“理解”句子的内容含义。比如说,语言模型能告诉我们什么样的句子是常用句子,但无法告诉我们两句话的意思是否相似或者相反。
博文视点Broadview
2020/06/11
1.1K0
自然语言处理:语言模型与评价方法
大语言模型中的常用评估指标
EM 是 exact match 的简称,所以就很好理解,em 表示预测值和答案是否完全一样。
BBuf
2023/08/22
3K0
大语言模型中的常用评估指标
困惑度(perplexity)的基本概念及比较多种模型下的计算(N-gram, 主题模型/LDA, 神经网络/RNN)
发现网络上流传的关于困惑度(perplexity)大多数都是利用了N-gram或者主题模型的例子来阐述的。但是现在这个年代来学习这个指标的人多半都是想研究神经网络的,而两者的对困惑度的计算方法又很不同,这就不能不让人对“困惑度”感到“困惑”了。本人虽然才疏学浅,还是斗胆在这里尝试写一篇文章,试图用简洁的方式来梳理清楚其中的困惑。
blmoistawinde
2020/03/20
11.2K0
【Hello NLP】CS224n笔记[5]:语言模型(LM)和循环神经网络(RNNs)
相比于计算机视觉,NLP可能看起来没有那么有趣,这里没有酷炫的图像识别、AI作画、自动驾驶,我们要面对的,几乎都是枯燥的文本、语言、文字。但是,对于人工智能的征途来说,NLP才是皇冠上的那颗珍珠,它美丽却又难以摘取,当NLP的问题解决了,机器才真正具备了理解、思考的能力,我们才敢说实现了真正的“智能”。
beyondGuo
2020/05/25
9010
通俗理解n-gram语言模型
本文主要介绍n-gram语言模型,如果想要了解语言模型的相关知识可以看《带你理解语言模型》。
触摸壹缕阳光
2020/07/20
3K0
通俗理解n-gram语言模型
人机对话系统回复质量的自动化评估
对话系统 人机对话系统分为任务型对话和非任务型对话系统。对于任务型对话系统的评价,一般采用任务完成的程度来进行评估,例如“导购”机器人,主要看用户是否点击“推荐商品”等来评估。非任务型对话系统,一般是闲聊系统,若是多轮对话,一般使用用户与机器之间进行对话的轮数来评估系统优劣。但是若是单轮对话呢,如何评价机器给出回复的好坏?对于给定一句话的回复,不同的人可以给出不同的答案,只要自圆其说即可,如此开放的回复空间,评价回复的好坏实属困难。 而目前并没有什么公认的评价指标可以更好地对对话系统的回复进行评价。很多论文
CodeInHand
2018/06/07
4.1K2
LLM基础知识
💥通常,大语言模型 (LLM) 是指包含数千亿 (或更多) 参数的语言模型(目前定义参数量超过10B的模型为大语言模型),这些参数是在大量文本数据上训练的,例如模型 GPT-3、ChatGPT、PaLM、BLOOM和 LLaMA等.
@小森
2024/06/04
3520
LLM基础知识
【深度学习】序列生成模型(四):评价方法
  困惑度(Perplexity)是一种用来衡量序列生成模型性能的指标。在给定一个测试文本集合的情况下,一个好的序列生成模型应该使得测试集合中句子的联合概率尽可能高。困惑度是信息论中的一个概念,用来度量一个分布的不确定性。
Qomolangma
2024/07/30
2180
自然语言处理中的语言模型简介
语言模型常常与单词嵌入混淆。主要的区别在于,在语言模型中,单词顺序很重要,因为它试图捕捉单词之间的上下文,而在单词嵌入的情况下,只捕捉语义相似度(https://en.wikipedia.org/wiki/Semantic_similarity) ,因为它是通过预测窗口中的单词来训练的,而不管顺序如何。
磐创AI
2020/05/25
9540
用飞桨做自然语言处理:神经网络语言模型应用实例
语言模型的身影遍布在NLP研究中的各个角落,想要了解NLP领域,就不能不知道语言模型。
量子位
2019/08/15
5420
基于语言模型的拼写纠错
本文则针对中文拼写纠错进行一个简要的概述,主要分享基于n-gram语言模型和困惑集来做中文拼写纠错的方法。
腾讯知文实验室
2018/07/04
7.7K0
带你理解语言模型
显然"西安在去哪"是一句极其别扭不通的句子,所以我们会很自然的选择输出"现在去哪",但是输入法没有我们那么智能能够一下子就判断出要输出哪一句话,输入法会计算出两个句子的概率值,然后通过比较选择概率值大的句子作为最终的输出结果,计算句子概率值的工具就是语言模型。
触摸壹缕阳光
2020/07/14
4220
带你理解语言模型
机器学习|7种经典预训练模型原理解析
目前无论在CV领域还是NLP领域,预训练都是一个很普遍和普适的方法。我们都知道深度学习的模型越庞大,模型参数越多,为了避免过拟合就需要相应大规模的数据集,但对于很多任务而言,样本标注的成本昂贵。相反,大规模无标签数据库相对容易建立,为了充分利用这些无标记数据,我们可以先使用它们在其他一些任务上学习一个好的特征表示,再用于训练目标任务。
智能生信
2021/02/04
5.5K0
「X」Embedding in NLP|Token 和 N-Gram、Bag-of-Words 模型释义
ChatGPT(GPT-3.5)和其他大型语言模型(Pi、Claude、Bard 等)凭何火爆全球?这些语言模型的运作原理是什么?为什么它们在所训练的任务上表现如此出色?
Zilliz RDS
2023/12/05
2200
「X」Embedding in NLP|Token 和 N-Gram、Bag-of-Words 模型释义
斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型
ShowMeAI为斯坦福CS224n《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释,并制作成了GIF动图!
ShowMeAI
2022/05/08
5500
斯坦福NLP课程 | 第6讲 - 循环神经网络与语言模型
从经典结构到改进方法,神经网络语言模型综述
语言模型(LM)是很多自然语言处理(NLP)任务的基础。早期的 NLP 系统主要是基于手动编写的规则构建的,既费时又费力,而且并不能涵盖多种语言学现象。直到 20 世纪 80 年代,人们提出了统计语言模型,从而为由 N 个单词构成的序列 s 分配概率,即:
机器之心
2019/07/29
1.5K0
A.深度学习基础入门篇[二]:机器学习常用评估指标:AUC、mAP、IS、FID、Perplexity、BLEU、ROUGE等详解
机器学习的评价指标有精度、精确率、召回率、P-R曲线、F1 值、TPR、FPR、ROC、AUC等指标,还有在生物领域常用的敏感性、特异性等指标。
汀丶人工智能
2023/04/06
1.7K0
A.深度学习基础入门篇[二]:机器学习常用评估指标:AUC、mAP、IS、FID、Perplexity、BLEU、ROUGE等详解
推荐阅读
相关推荐
【现代深度学习技术】循环神经网络03:语言模型和数据集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验