Linux防火墙未关闭踩的坑—— No route to host

2023-10-30

网络服务很多时候和Linux防火墙都有着很多的关系,经常因为没有关闭Linux防火墙而导致一些奇葩问题的出现。

现有两台服务器 S1 和 S2,在 S1 上部署程序 P1,在 S2 上部署 P2,发现 P1,P2 连接报错,日志只有很简单的 connect S2_IP fail!

试了下在 S1 上部署 P1,P2。能直接连接上。

最后为了找到问题,又找了个服务器 S3,在 S3 上同时部署 P1 和 P2,在 S1 上部署程序 P1,在 S2 上部署 P2。然后gdb S1 和 S3 上的 P1。

最后发现问题在于这一行代码

    getsockopt(s, SOL_SOCKET, SO_ERROR, &error, &len);

    /*
     * 根据 error 的值做相应的处理
    */

在 S3 上的 P1,执行完此行后 error 的值是 0 。但在 S1 上执行完此行后, error 的值是 113 。

搜了下 SO_ERROR 值 113 是什么错,搜了上 getsocktopt SO_ERROR 113 。找到 SO_ERROR values 的值为 113 是因为 no route to host 。(在 /usr/include/asm-generic/errno.h 文件可以找到)

#define EHOSTUNREACH 113 /* No route to host */

也就是没找到主机的路由,搜了下这大概是什么原因造成的,一眼看到防火墙未关闭几个大字,就明白了。因为 S2 上的防火墙没有关闭,所以 P1 连接 P2 fail!

手动关闭 S2 上的防火墙,再运行 S1 上的 P1 和 S2 上的 P2,发现连接成功。注意 Redhat 7 不支持 service iptables stop 了,需要用 systemctl 。

参考博客、文章:
getsockopt和setsockopt函数

Linux getsockopt SO_ERROR values (errno.h)

Connect error: No route to host(errno:113) 连接错误解决办法--关闭iptables防火墙

Redhat Linux 7 关闭防火墙命令

linux systemctl命令详解

linux防火墙

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux防火墙未关闭踩的坑—— No route to host 的相关文章

  • 无关的库链接

    我有一个可能有点愚蠢的问题 因为我很确定我可能已经知道答案了 假设你有静态库A 动态共享库B和你的linux下的程序C 假设库 A 调用库 B 中的函数 并且您的程序调用库 A 中的函数 现在假设 C 在 A 中调用的所有函数都不使用 B
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 套接字:监听积压并接受

    listen sock backlog 在我看来 参数backlog限制连接数量 这是我的测试代码 server initialize the sockaddr of server server sin family AF INET ser
  • 如何查明 Ubuntu 上安装了哪个版本的 GTK+?

    我需要确定 Ubuntu 上安装了哪个版本的 GTK 男人似乎不帮忙 这个建议 https stackoverflow com a 126145 会告诉您安装了哪个 2 0 的次要版本 不同的主要版本将具有不同的包名称 因为它们可以在系统上
  • 如何让 clangd 转向 c++20

    当没有其他信息时 如何让 clangd 回退到 c 20 例如 在第一次构建之前 cmake 可以生成一个 这是在带有最新 LLVM 的 Arch Linux 上 这是通过 Emacs LSP 运行的 但这应该没有什么区别 你可以加 Com
  • 构建 makefile 依赖/继承树

    如果我解释得不好或者问了一些明显的问题 我很抱歉 但我是 Linux 内核的新手 而且有点深入 我们有一个嵌入式 Linux 系统 它附带一个 文档非常糟糕的 SDK 其中包含数百个文件夹stuff 大多数文件夹包含rules make m
  • 伊迪德信息

    重新定义问题 有什么方法可以获取所连接显示器的序列号吗 我想收集显示器的Eid信息 当我使用 logverbose 选项运行 X 时 我可以从 xorg 0 log 文件中获取它 但问题是 如果我切换显示器 拔出当前显示器 然后插入另一个显
  • 为什么在 Linux 上字符串文字的内存地址与其他字符串文字的内存地址如此不同?

    我注意到字符串文字在内存中的地址与其他常量和变量 Linux 操作系统 非常不同 它们有许多前导零 未打印 Example const char h Hi int i 1 printf p n void h printf p n void
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • Composer 安装要求

    我正在尝试将 Composer 安装到 Laravel 项目中 当我做的时候sudo composer install在项目目录中它显示了两个错误 Problem 1 Installation request for simplesoftw
  • Linux 桌面快捷方式和安装图标

    我需要添加什么到我的 spec文件来创建桌面快捷方式并在安装过程中为快捷方式分配一个图标 rpm 如果需要脚本 一个示例将非常有帮助 您在 Linux 下使用 desktop 文件作为图标 图标放置的位置取决于您使用的发行版和桌面环境 由于
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte

随机推荐

  • 变量交换的四种方式

    可以使用以下方法对两个变量进行交换 方法一 定义一个中间量 define CRT SECURE NO WARNINGS include
  • VUE 项目文件夹上传下载解决方案

    原理 js将大文件分成多分 全部上传成功之后 调用合并接口合成文件 如果传输中断 下次上传的时候过滤掉已经上传成功的分片 将剩余的分片上传 成功之后合并文件 前置条件 获取uoloadId接口 用于标记分片 分片上传接口 合成文件接口 后端
  • matplotlib画图间隔范围等设置

    import matplotlib pyplot as plt from matplotlib pyplot import MultipleLocator 从pyplot导入MultipleLocator类 这个类用于设置刻度间隔 x va
  • Burpsuite教程(一)Burpsuite 火狐谷歌浏览器抓包教程

    文章目录 Web抓包 火狐抓包 谷歌抓包 小技巧 结束 Web抓包 火狐抓包 环境需求 火狐浏览器 代理插件 1 打开测试工具BurpSuite 默认工具拦截功能是开启的 颜色较深 我们点击取消拦截 下图取消拦截状态 数据包可以自由通过 2
  • vue3.0中全局注册组件版本1-官方

    前言 在对vue3 0的使用和学习中 发现了很多和以前不一样的方法 这里聊一聊vue3 0中给我们提供的全局的注册组件方法 官方文档 入口 目录 具体方法介绍 1 前提 返回一个提供应用上下文的应用实例 应用实例挂载的整个组件树共享同一个上
  • iOS字典转成JSON换行符问题

    问题 使用系统框架将字典转成压缩转义后的JSON字符串 发现字符串中带有多个换行符 系统转JSON的方法如下 let json try JSONSerialization jsonObject with validData options
  • 嵌入式开发笔记—关于>>和<<、&和&&和指针

    1 gt gt 和 lt lt 符号 gt gt 可以理解为除以2的几次方 例如a gt gt b相当于a除以2 b 相反 符号 lt lt 可以理解为乘2的几次方 上面描述的只是它们的数字意义 实际上 gt gt 为右移运算符 其运算规则
  • 架构师之我见

    架构师是一个项目组的灵魂人物 他决定着整个系统的技术选型 整体架构以及模块划分 同时还可能担当与领导层的沟通角色 从某种意义上来说 架构师在很大程度上决定着项目的成败与否 正所谓火车跑得快 全靠车头带 很多优秀的架构师都是从一个优秀的开发人
  • C模拟C++静态断言

    百度百科 C 11新特性 静态断言 Static assertions Static assert 在解释 if 和 error 之后被处理 简单的说就是检测代码 不可能 事件的发生 如果真的发生了 在编译期间编译器会报错 表示代码的逻辑存
  • vector数组最大、小值及所在坐标

    在普通数组中 例 a 1 2 3 4 5 6 int maxValue max element a a 6 最大值 int minValue min element a a 6 最小值 int maxPosition max element
  • 学创客机器人编程材料费贵吗_创客教育只是学编程、机器人和3D打印?

    创客 Mak er 创 指创造 客 指从事某种活动的人 创客 本指勇于创新 努力将自己的创意变为现实的人 这个词译自英文单词 Mak er 源于美国麻省理工学院微观装配实验室的实验课题 此课题以创新为理念 以客户为中心 以个人设计 个人制造
  • cavans 详解

    Canvas Color Styles Shadows 属性 fillStyle 设置或者返回填充的颜色 渐进色 strokeStyle 设置或者返回描边的颜色 渐进色 shadowColor 设置或者返回shadows的颜色 shadow
  • KEIL MDK中 warning: #223-D: function "xxx" declared implicitly 解决方法

    今天在EINT的范例里添加了一个函数 即eint c中添加了一个datawrite 的函数 并在主函数main c中调用 编译便警告 warning 223 D function datawrite declared implicitly
  • 详解Shiro认证流程

    详解Shiro认证流程 isAccessAllowed Subject在如何得到 resolveSession doCreateSubject save Subject subject isAuthenticated onAccessDen
  • EditText TextWatch监听简单使用

    TextWatch 接口方法如下 方法执行顺序 beforeTextChanged gt onTextChanged gt afterTextChanged new TextWatcher This method is called to
  • vue 用户列表,请求接口中数据并渲染页面,分页

    参考 vue电商项目实战 哔哩哔哩 bilibili 用户列表 渲染数据 一般数据 1 接口请求数据格式 get方式 传入参数 page rows 2 初始化定义变量 3 联调接口 1 created 2 methods 发送请求 3 接口
  • VulnHub--Me-and-My-Girlfriend-1

    背景 有两个恋人 即Alice和Bob 这对夫妻本来很浪漫 但是自从Alice在一家私人公司 Ceban Corp 工作以来 爱丽丝对鲍勃的态度发生了一些变化是 隐藏 的 而鲍勃 Bob 寻求您的帮助 以获取爱丽丝 Alice 隐藏的内容并
  • MongoDB用户管理授权

    文章目录 1 角色类型 2 注意事项 3 给单个数据库授权 4 给一个用户授权多个数据库 5 其它命令 1 角色类型 数据库用户角色 read readWrite 数据库管理角色 dbAdmin dbOwner userAdmin 集群管理
  • python监控mysql连接数 批量杀进程 解决too many connections问题

    线上django服务偶尔会因为机器访问mysql过多 造成too many connections 问题 导致服务挂掉 之前调大了最大连接数 有点治标不治本 所以今天抽空写个监控mysql连接数的服务 如果连接数超过某个阈值 就杀掉一部分连
  • Linux防火墙未关闭踩的坑—— No route to host

    网络服务很多时候和Linux防火墙都有着很多的关系 经常因为没有关闭Linux防火墙而导致一些奇葩问题的出现 现有两台服务器 S1 和 S2 在 S1 上部署程序 P1 在 S2 上部署 P2 发现 P1 P2 连接报错 日志只有很简单的