python-mini-projects 实战:用 Python socket 查询任意网站的主机名与 IP 地址

发布时间:2026/9/21 1:42:27

python-mini-projects 实战:用 Python socket 查询任意网站的主机名与 IP 地址 示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载本指南围绕 python-mini-projects 仓库中的Find_out_hostname_and_ip_address迷你项目展开讲解如何用 Python 标准库socket在终端中交互式查询一个网站域名对应的 IP 地址并妥善处理无效域名等异常。阅读完本文你将掌握socket.gethostbyname()的用法、socket.gaierror异常处理模式并能独立把这个几十行的脚本改造成带完整域名解析、多结果展示的实用工具。项目定位一句话说清这个脚本做什么根据项目自带文档 README.md 的描述这个项目就是「获取一个网站website的 IP 地址和主机名hostname」。整个脚本只有一个文件、十几行代码核心逻辑是在终端提示用户输入一个网址URL原样回显用户输入的主机名借助 Python 标准库socket中的gethostbyname()函数把域名解析成 IP 地址并打印出来如果域名无法解析无效主机名捕获socket.gaierror异常并给出友好的错误提示。它不依赖任何第三方库仅使用 Python 内置模块因此前置条件Prerequisites为 None——只要本机装有 Python 3 即可运行。如何运行脚本文档 README.md 给出的运行方式非常直接进入项目目录后执行python3 Hostname_IPaddress.py运行后会看到提示Please enter website address(URL):输入一个域名例如www.google.com.br并回车脚本随即输出两行结果Hostname: www.google.com.br IP: 172.17.217.227其中Hostname是用户输入的原始网址IP是socket.gethostbyname()返回的解析结果。仓库提供的 Screenshot.png 展示的正是上述完整交互过程。源码逐行解析标准库 socket 的最小实践完整源码位于 Hostname_IPaddress.py全文只有 12 行结构清晰非常适合作为学习socket模块的入门样例# importing socket library import socket def get_hostname_IP(): hostname input(Please enter website address(URL):) try: print (fHostname: {hostname}) print (fIP: {socket.gethostbyname(hostname)}) except socket.gaierror as error: print (fInvalid Hostname, error raised is {error}) get_hostname_IP()逐段来看第 2 行import socket导入 Python 标准库socket。该模块封装了操作系统底层的套接字BSD socket接口同时也提供了一组与主机名 / IP 地址互转的辅助函数本脚本只用到了其中的gethostbyname。第 45 行 定义函数并使用input()收集输入get_hostname_IP()通过input()同步读取用户在终端输入的一行内容作为目标网址存入变量hostname。第 68 行 解析与输出try块内先用 f-string 原样打印Hostname: {hostname}随后调用socket.gethostbyname(hostname)把域名交给操作系统完成 DNS 查询并将返回的 IPv4 地址拼接到IP:前缀后打印。第 910 行 异常兜底except socket.gaierror as error:捕获“地址信息错误”Get Address Info Error即 DNS 解析失败时抛出的异常类型输出Invalid Hostname, error raised is {error}把具体的系统错误信息一并展示给用户避免程序直接崩溃退出。第 12 行get_hostname_IP()在脚本顶层直接调用函数保证脚本被python3直接执行时立即进入交互流程。从代码结构看该脚本刻意保持“单函数 单次查询”的极简形态函数内部没有循环一次输入、一次解析、一次输出后程序即结束错误处理也只覆盖了gaierror这一类异常。工作流程与原理一次完整的 DNS 解析调用链把上面的代码还原成执行链路整个程序的运行流程如下用户输入网址 ──► input() 读取字符串 ──► socket.gethostbyname(域名) ──► 操作系统发起 DNS 查询可能命中本地缓存或 hosts 文件 ──► 解析成功 ──► 返回 IPv4 地址并打印 └── 解析失败 ──► 抛出 socket.gaierror ──► 打印错误信息其中最关键的一环是socket.gethostbyname(hostname)。该函数是socket模块中最简单、最常用的“域名 → IPv4 地址”转换入口其底层行为可以概括为它本质上是 POSIXgethostbyname()的 Python 封装查询顺序通常为本机hosts文件 → DNS 缓存 → 配置的 DNS 服务器只返回一个IPv4 地址A 记录。如果域名存在多条 A 记录多数实现下只返回其中一条这正是它简单但也受限的地方若传入的字符串不是一个合法主机名或 DNS 查询失败会抛出socket.gaierror——这正是脚本第 9 行捕获的异常。这种“先input()拿用户输入再在try/except中做网络解析”的交互模式在仓库其他网络类项目中同样反复出现属于一套通用的骨架例如 Fetch_open_ports/fetch_open_port.py 第 7 行同样调用gethostbyname(target)先把目标主机名转成 IP再基于 IP 做端口扫描Network Usage Tracker/network_usage_tracker.py 第 90 行则用socket.gethostbyname(socket.gethostname())获取本机局域网 IP用于展示本机网络流量统计。错误处理无效域名时发生了什么脚本对异常的处理集中在socket.gaierror上这也是把“容易崩溃的小脚本”变成“可交互的实用工具”的关键一行。当用户输入类似not-a-real-domain-xyz.com或带空格的非法字符串时gethostbyname()会抛出socket.gaierror此时程序不会中断而是打印Invalid Hostname, error raised is [Errno -2] Name or service not known从源码结构可以推断该脚本目前只针对这一种异常做了专门处理如果输入字符串为空直接回车、包含非法字符触发其他异常或网络不可用导致解析超时程序仍可能以默认的 traceback 形式报错退出。这一点是后续可扩展的方向——例如再捕获socket.error、对空输入做校验或加上循环让用户输错后可以重新输入。局限性与进阶方向原文档与源码都刻意保持最小实现理解它的边界有助于你在真实场景中按需扩展仅支持 IPv4gethostbyname()只返回 IPv4A 记录不涉及 IPv6AAAA 记录。只返回单个地址同一域名可能配置多条 A 记录负载均衡场景gethostbyname()无法全部列出。仅做正向解析脚本只能“域名 → IP”不能“IP → 域名”。异常覆盖有限目前仅捕获gaierror。如果需要更强的能力socket模块还提供了一系列互补函数可在此脚本基础上直接替换或增强socket.gethostbyname_ex(hostname)返回(hostname, aliaslist, ipaddrlist)三元组可一次拿到该域名的所有 IP 地址与别名socket.getaddrinfo(host, port)现代推荐的解析接口同时支持 IPv4/IPv6并可指定协议族socket.gethostbyaddr(ip)反向解析由 IP 查询主机名socket.getfqdn(host)获取主机的完整限定域名FQDN。此外仓库中的 Dns_record/dns_record.py 是一个主题相近的进阶项目它基于第三方库dns.resolver解析并打印网站的A 记录与 MX 邮件交换记录。如果你希望从“只拿一个 IP”升级到“查看域名完整的 DNS 记录”可以对照该项目的实现继续深入学习。小结Find_out_hostname_and_ip_address是 python-mini-projects 中一个典型的“零依赖、单文件、可交互”的入门级网络脚本。它用不到 15 行代码完整演示了 Python 标准库socket的三件事交互式读取输入、gethostbyname()完成域名到 IP 的解析、gaierror做异常兜底。顺着这条主线你既能快速上手最基本的 DNS 正向解析也能以此为起点把脚本演进成支持多记录、IPv6、反向解析乃至完整 DNS 查询的实用网络工具。赞分享示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载相关推荐python-mini-projects 实战用 Python socket 编写 Fetch_open_ports 端口扫描脚本python mini projects 实战用 Python socket 编写 Fetch_open_ports 端口扫描脚本 本篇技术指南围绕 pyth示例工程用 dnspython 查询域名 A 记录与 MX 记录python-mini-projects 的 DNS 记录查询脚本详解用 dnspython 查询域名 A 记录与 MX 记录python mini projects 的 DNS 记录查询脚本详解 本文基于 python min示例工程python-mini-projects 实战基于 OpenWeatherMap API 的当前天气查询脚本Fetch_current_weatherpython mini projects 实战基于 OpenWeatherMap API 的当前天气查询脚本Fetch_current_weather 导示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/21 1:42:27

光伏电池Simulink仿真建模与MPPT控制详解

简介:这是一份面向电气工程、新能源等相关专业毕业设计的光伏电池Simulink仿真论文文档,完整呈现了从光伏发电原理到最大功率点跟踪(MPPT)的系统性研究。文档基于MATLAB/Simulink对不同日照强度和温度下的电池输出特性进行建模与仿…

2026/9/21 1:37:27

Excel折线图底层逻辑:从数据结构到业务叙事的七步精调

1. 为什么一张折线图值得花20分钟认真做——从“能画出来”到“让人一眼看懂”的真实差距你有没有过这样的经历:辛辛苦苦把销售数据整理进Excel,选中区域、点插入、选折线图,图表出来了——但老板扫了一眼就说:“这图我看不懂&…

2026/9/21 2:42:31

Python实现Eigenface人脸识别:从PCA原理到项目实战

简介:本资源是一份面向计算机视觉初学者与课程设计实践者的Eigenface人脸识别完整实现方案,基于Python 3.7与OpenCV 4.5.0构建,聚焦人脸检测、图像预处理、特征提取与重构等核心环节,适用于人工智能、模式识别类课程实验及本科级项…

2026/9/21 2:42:31

ENSEMBL下载GTF注释文件全指南:版本选择与下载流程详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:42:31

两阶段鲁棒优化与CCG算法:MATLAB实现列约束生成求解框架

1. 从问题到算法:两阶段鲁棒优化的建模思路与求解框架1.1 为什么需要两阶段鲁棒优化先聊点实在的。很多做优化、做决策的同学,最开始接触的都是确定性优化——参数固定,约束固定,目标函数一写,扔给求解器出结果。但真实…

2026/9/21 2:42:31

短剧AI配音翻译实战指南:泰越印尼语本地化落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:37:31

VMware虚拟机光标消失原因与修复指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/21 0:02:23

OpenResearch:构建可复现的开放式研究工作流

第一次看到“OpenResearch”这个名字,我脑子里冒出的不是某个具体软件,而更像一种研究方式的宣言:开放、可复现、可验证。这三件事放在一起,其实比大多数人想象中难得多。过去几年我一直在折腾自己的研究工作流,从纯纸…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码