服务器绑定 127.0.0.1 和 0.0.0.0 的区别
前言
IP 地址实际上并不是分配给计算机的,而是分配给网卡的,因此当计算机上存在多块网卡时,每一块网卡都会有自己的 IP 地址。
绑定 127.0.0.1 是绑定到 lookback 这个虚拟的本地回环接口,该接口只处理本机上的数据,如果服务器绑定 127.0.0.1 外部是无法访问的。
绑定 0.0.0.0 是绑定到所有可用的网络接口,也就是说,此时可以接受来自任何网络接口的连接请求,外部是可以正常访问的。
在 ubuntu 系统可以用 ifconfig 命令查看网络接口信息,Win 系统用 ipconfig 命令查看。
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.30.36.166 netmask 255.255.240.0 broadcast 172.30.47.255lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0
下面用代码来演示两种情况的区别。
绑定 127.0.0.1
以下代码由 通义千问 2.5 生成:
func handleConnection(conn net.Conn) {defer conn.Close()scanner := bufio.NewScanner(conn)for scanner.Scan() {text := scanner.Text()fmt.Println("Received:", text)_, err := conn.Write([]byte(text + "\n"))if err != nil {fmt.Println("Error writing to socket:", err)break}}if err := scanner.Err(); err != nil {fmt.Println("Error reading from socket:", err)}
}func main() {port := "8080"listener, err := net.Listen("tcp", "127.0.0.1:"+port)if err != nil {fmt.Println("Error listening:", err.Error())os.Exit(1)}defer listener.Close()fmt.Println("Listening on:" + port)for {conn, err := listener.Accept()if err != nil {fmt.Println("Error accepting:", err.Error())continue}go handleConnection(conn)}
}
运行这段代码:
$ go run echo.go
Listening on:8080
先在本机使用 telnet 测试能否访问:
$ telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
hello
此时一切正常,服务器可以正常响应。
再换另一台计算机测试:
$ telnet 47.100.200.202 8080
Trying 47.100.200.202...
telnet: Unable to connect to remote host: Connection refused
直接报错,不能访问。
这里访问的 47.100.200.202 是服务器的公网 IP,上面的 172.30.36.166 是内网 IP。
绑定 0.0.0.0
将 127.0.0.1 修改为 0.0.0.0 后重新运行。
listener, err := net.Listen("tcp", "0.0.0.0:"+port)
还是先在本机测试:
$ telnet 127.0.0.1 8080
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hi
hi
还是可以正常访问,没有问题。
再换到另一台计算机测试:
$ telnet 47.100.200.202 8080
Trying 47.100.200.202...
Connected to 47.100.200.202.
Escape character is '^]'.
hello hi
hello hi
这时就可以正常访问了。
参考资料
- 《网络是怎样连接的》
- 断网了,还能 ping 通 127.0.0.1 吗?
相关文章:
服务器绑定 127.0.0.1 和 0.0.0.0 的区别
前言 IP 地址实际上并不是分配给计算机的,而是分配给网卡的,因此当计算机上存在多块网卡时,每一块网卡都会有自己的 IP 地址。 绑定 127.0.0.1 是绑定到 lookback 这个虚拟的本地回环接口,该接口只处理本机上的数据,…...
DeepSeek提示词手册
一、核心原则:基于DeepSeek的推理特性 自然语言优先undefinedDeepSeek擅长理解自然表达,无需复杂模板。例如: ❌旧模板:"你是专业分析师,需分三步回答,第一步…" ✅高效提问:"…...
校园网规划方案
个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚: https://blog.csdn.net/qq_52914969?typeblog 本课程设计参考学习计算机网络 思科Cisco Packet Tracer仿真实验_哔哩哔哩_bilibili, 文章和pkg详见个人博客站: http://www.kervin24.to…...
python怎么求 一个数是否包含3
python求一个数包含3的方法: 1、使用“for i in 列表名”循环遍历列表中的每一个元素并将每个元素用str()函数转换成字符串格式 2、用“if str(3) in i”判断该元素中是否含有3 完整代码如下: 执行结果如下:...
ARM RFEIA指令作用
FreeRTOS第一个任务如何run起来的 在给ARM cortex R5适配FreeRTOS的过程中,在执行第一个task时,都是使用vTaskStartScheduler()函数,把第一个task运行起来的,其中比较关键在port.c实现的xPortStartScheduler()函数中,…...
【Kubernetes】常用命令全解析:从入门到实战(上)
🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Kubernetes简介 2、安装Kubernetes …...
项目实战(11)-双通道气体压力计V1.0
一. 产品简介: 1、项目背景是在实际应用中需要监控通道内气体的压力,压力计分为两个通道;通道一时实时监控;通道二是保压,设定保压值得上下限后通道内得气体压力值会一直保持在这个范围内。 二. 应用场景:…...
Node.js怎么调用到打包的python文件呢
在 Node.js 中调用打包后的 Python 可执行文件(如 PyInstaller 生成的 .exe 或二进制文件),可以通过以下步骤实现: 一、Python 打包准备 假设已有打包好的 Python 文件 your_script.exe(以 Windows 为例)&…...
Transformer 详解:了解 GPT、BERT 和 T5 背后的模型
目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…...
利用二分法进行 SQL 盲注
什么是sql注入? SQL 注入(SQL Injection)是一种常见的 Web 安全漏洞,攻击者可以通过构造恶意 SQL 语句来访问数据库中的敏感信息。在某些情况下,服务器不会直接返回查询结果,而是通过布尔值(Tr…...
如何通过 bugreport 分析 Android 系统日志?
📢 1. 职业规划篇 来聊聊安卓职业规划?整机开发大专能做么? 📢 2.基础篇 基础篇.前言 基础篇.编译环境搭建 基础篇.源码目录简介 基础篇.系统 mk_bp 讲解 基础篇.开机动画定制 基础篇.定制桌面壁纸、导航方式 基础篇.系统属性、ap…...
安防机器人电源解决方案
安防机器人电源方案简介 随着安防机器人领域技术的不断进步,越来越多的新型传感器,特别是激光雷达(光探测与测距)的广泛应用,以及先进的板载AI处理器的加入,使得机器人能够更加安全、智能地与人类进行互动。然而,这也对机器人的电源系统提出了更高的要求。某安防机器人…...
内网穿透的应用-Ubuntu本地Docker搭建pichome文件管理系统打造个人云相册
文章目录 前言1.关于pichome2.本地部署pichome3.简单使用pichome4. 安装内网穿透5.配置pichome公网地址6. 配置固定公网地址 前言 你是不是也经常遇到这样的尴尬:手机、电脑里堆满了照片和视频,想找一张特定的图片时却像在大海捞针一样无从下手…...
力扣-栈与队列-1047 删除字符串中的所有相邻重复项
思路 利用栈更新紧邻的元素,和要插入的元素作比较 代码 class Solution { public:string removeDuplicates(string s) {if(s.size() < 2) return s;stack<char> st;st.push(s[0]);for(int i 1; i < s.size(); i){if(!st.empty() && s[i] s…...
旅客服务系统(PSS, Passenger Service System)
1. 系统概述 1.1 系统目标 旅客服务系统(PSS)旨在为旅客提供一站式航空服务,涵盖航班信息查询、机票预订、值机办理、行李托运、订单管理、支付集成等功能。系统通过模块化设计和分布式架构,确保高可用性、高性能、可扩展性和安全性,满足航空公司和旅客的多样化需求。 …...
Linux路径中的‘~‘
本文来自DeepSeek 在Linux中,~ 是用户主目录的简写。具体含义如下: 当前用户的主目录: ~ 代表当前登录用户的主目录。例如,用户 alice 的主目录通常是 /home/alice,~ 就指向 /home/alice。 其他用户的主目录ÿ…...
认识网络安全
一 网络攻击链 踩点-工具准备-载荷投递-漏洞利用-释放载荷-建立通道-目标达成 简化下: 目标侦察:准确识别目标,收集目标详细信息,比如 网络、 邮箱、员工、社会关系、对外提供服务、漏洞 信息等,为 后续攻击做准备。…...
信息科技伦理与道德3-3:智能决策
2.3 智能控制 智能控制算法介绍 智能控制算法的优化:性能提升的秘诀 https://blog.csdn.net/universsky2015/article/details/137309308 案例一:特斯拉自动驾驶汽车未能识别白色卡车导致车祸...
以 Python 为工具搭建的热门旅游景点数据分析系统
系统介绍: 随着计算机技术的飞速发展,计算机系统的应用已广泛渗透到社会的各个领域。大数据的大量应用为人们的生活带来了极大的便利。在此背景下,将热门旅游景点数据分析管理与互联网相结合,利用计算机搭建热门旅游景点数据分析…...
ZooKeeper 技术全解:概念、功能、文件系统与主从同步
引言 随着分布式系统变得越来越复杂,对协调服务的需求也在不断增长。ZooKeeper 作为一个由 Apache 维护的开源分布式协调服务框架,广泛用于 Hadoop 生态系统和其他需要协调的分布式环境中。这一系统旨在解决分布式应用中常见的挑战,如配置管…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
