使用 Linux 网络设备别名时指定 TCP 套接字的源 IP 地址

2024-02-13

对于一些特定的网络测试,我创建了一个 VLAN 设备 eth1.900 和几个别名 eth1.900:1 和 eth1.900.2。



    eth1.900  Link encap:Ethernet  HWaddr 00:18:E7:17:2F:13
              inet addr:1.0.1.120  Bcast:1.0.1.255  Mask:255.255.255.0

    eth1.900:1 Link encap:Ethernet  HWaddr 00:18:E7:17:2F:13
              inet addr:1.0.1.200  Bcast:1.0.1.255  Mask:255.255.255.0

    eth1.900:2 Link encap:Ethernet  HWaddr 00:18:E7:17:2F:13
              inet addr:1.0.1.201  Bcast:1.0.1.255  Mask:255.255.255.0
  

连接到服务器时,有没有办法指定将使用这些别名中的哪一个?我可以使用 -I 地址选项 ping 来选择要使用的别名,但我看不到如何在代码中使用 TCP 套接字而不使用原始套接字来执行此操作,因为我也想在没有额外套接字的情况下运行特权,即如果可能的话,不以 root 身份运行。

不幸的是,即使使用 root,SO_BINDTODEVICE 也不起作用,因为别名设备名称无法识别:

printf("Bind to %s\n", devname);
if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, (char*)devname, sizeof(devname)) != 0)
{
    perror("SO_BINDTODEVICE");
    return 1;
}

Output:



    Bind to eth1.900:1
    SO_BINDTODEVICE: No such device
  

使用 getifaddrs() 枚举所有接口并查找要绑定的接口的 IP 地址。然后在调用 connect() 之前,使用 bind() 绑定到该 IP 地址。

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

使用 Linux 网络设备别名时指定 TCP 套接字的源 IP 地址 的相关文章

  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • RTSP 设置后接收 RTP 数据包

    我正在尝试使用 Python 从 IP 摄像机流式传输 RTP 数据包 我能够使用 RTSP 协议发送描述 设置和播放命令 但是 我无法开始使用 RTP 传输实际视频流 这是代码 import socket def printrec rec
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 C 中使用单个消息队列是否可以实现双向通信

    我希望服务器向客户端发送一些消息 并让客户端确认它 我被分配了这个任务 我可以在 C linux 中使用单个消息队列来完成它还是我需要创建两个 谢谢 是的 可以使用 sysV 消息队列来做到这一点 从您之前的问题来看 您正在使用该队列 您可
  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 如何阻止ubuntu在使用apt安装或更新软件包时弹出“Daemons using outdatedlibraries”? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我最近新安装了 Ubuntu 22 04 LTS 我发现每次使用 apt 安装或更新软件包时 它都会询问我有关Which servic
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 如何将 Flutter 应用连接到 tcp 套接字服务器?

    我很难将 Flutter 应用程序连接到服务器上的网络 tcp 套接字 我知道我必须使用某种中间选项 以便在 tcp 套接字到 flutter 以及 Flutter 到 tcp 套接字之间转换数据 任何想法 信息如何实现这一目标 问题是如何
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • 通过 SO_RCVTIMEO 套接字选项在 Ruby 中设置套接字超时

    我试图通过 SO RCVTIMEO 套接字选项在 Ruby 中设置套接字超时 但它似乎对任何最近的 nix 操作系统都没有影响 使用 Ruby 的 Timeout 模块不是一个选择 因为它需要为每个超时生成和连接线程 这可能会变得昂贵 在需
  • Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等效项是什么?

    如何在不使用 argc argv 的情况下访问 Mac OS X 上的命令行 在 Linux 上 我会简单地阅读 proc self cmdline or use GetCommandLine在 Windows 上 但我找不到 Mac OS
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 如何在 *nix 中登录时运行脚本?

    我知道我曾经知道如何做到这一点 但是 如何在 unix 中登录时运行脚本 bash 可以 From 维基百科 Bash http en wikipedia org wiki Bash 28Unix shell 29 当 Bash 启动时 它

随机推荐

  • 如何在 VBA 2010 上导出图像之前裁剪图像

    我有一个子例程可以很好地导出从 Excel 中的某个范围内获取的图像 但我遇到了一个问题 即使我设法使图表对象透明并且没有边框 导出的图像有一个我希望在导出之前裁剪很多未使用的区域 Sub BtnSaveFile Click Dim RgE
  • 努力在 Glassfish 上创建 MySQL 连接池

    我以前已经这样做过 但由于某种原因 我在创建这个连接池时确实遇到了一些困难 当我在创建连接池后 ping 连接池时 出现以下错误 Ping Connection Pool for bondsaver is Failed Ping faile
  • 远程连接 Neo4j 服务器

    我相信创建远程连接的方法是更改 此行conf neo4j server properties 特别是删除注释并重新启动服务器 org neo4j server webserver address 0 0 0 0 我的网址是https 0 0
  • 启动 Nexus docker 镜像时如何设置管理员用户/密码

    当在 Nexus 2 docker 镜像中启动时 https hub docker com r sonatype nexus https hub docker com r sonatype nexus 如何配置它以将默认管理员用户密码更改为
  • 在 Clojure 中搜索 xml

    我有以下示例 xml
  • 有没有办法在 Protractor 测试中绕过 Chrome 地理定位对话框?

    在使用量角器自动化应用程序时 我遇到了这个问题 打开主页后 我会看到带有 阻止 允许 按钮的地理位置对话框 如果不选择任一选项 该对话框就无法继续 事实证明 这个对话框不是警报的实例 这就是为什么browser switchTo alert
  • 新 Activity 的 onStart 在父 Activity 的 onStop 之前调用

    我有一份申请 我用startActivity 开始活动 谁能真正告诉我为什么系统会调用onStart 首先是新 Activity 而不是父活动onStop 这可能吗 没有系统错误 我找到了在 onStart 之后直接调用 Fragment
  • 从文件生成频率表

    给定一个每行包含一个数字的输入文件 我如何计算某个项目在该文件中出现的次数 cat input txt 1 2 1 3 1 0 期望的输出 gt 1 3 1 1 cat output txt 0 1 1 3 2 1 3 1 如果该解决方案也
  • Postgres SELECT 数组中的值

    我有一个看起来像这样的 postgres 表 缩短 id serial col1 character varying 1 Life Health VA Data 我正在尝试执行以下操作 SELECT FROM mytable WHERE L
  • 析构函数的执行顺序?

    我知道c 中的析构函数没有执行顺序 我在几个类中使用以下结构 它是为了破坏实例和静态信息 public class MyClass private static readonly Destructor DestructorObject ne
  • =importXML() 中的 xpath 用于提取元描述

    我正在尝试使用 Xpath 使用 Google Sheets 从网页中提取元描述 我正在努力提取标题 importXml www example com title 以下是我的两个学习来源 http seogadget co uk play
  • 简单 MySQL 子查询性能

    考虑 2 个 MySQL 查询 SELECT ue userid e courseid FROM SELECT id courseid FROM mdl enrol WHERE status 0 AND courseid IN 46 e I
  • 使用 ADO .NET 调用 SQL 函数

    我想要在 SQL Server 中创建调用函数 它接收两个参数并返回一个整数 当我调用存储过程时 我使用以下代码 sqlcmd CommandType CommandType StoredProcedure sqlcmd CommandTe
  • C 或 C++ 中乘法和除法的较高部分?

    当我在汇编中将一对 4 字节整数相乘时 结果的较低部分在 EAX 中 较高部分在 EDX 中 如果我使用 C 或 C 并且我想获得更高的部分 是否可以不使用内联汇编 是否可以以同样的方式从 EAX 获得整数除法结果 从 EDX 获得模数结果
  • Android NDK - 附加包含目录

    我正在使用 Android NDK 构建共享库 我包含了 Android mk 文件中的一个片段 该片段给我带来了一些问题 LOCAL PATH call my dir other module here other module here
  • 在 React Native 中使用 React Navigation 隐藏 StackNavigator 上的标头

    我有以下内容 import React from react import StyleSheet Text View Button from react native import StackNavigator from react nav
  • 专门化模板类的模板成员函数?

    我有一个模板类 它有一个需要专门化的模板成员函数 如下所示 template
  • C#:获取从表单发布的值[重复]

    这个问题在这里已经有答案了 我使用带有方法 post 的表单从另一个页面发布一些数据 我想知道的是 获取这些值的最佳方法是什么 按以下形式的每个名称 Request name 或者有什么方法可以获取数据集合并迭代它 谢谢 你可以写 fore
  • 慢速 SoapHttpClientProtocol 构造函数

    我正在使用 Microsoft Dynamics CRM 进行一些实验 您通过 Web 服务与它交互 我已将 Web 引用添加到我的项目中 Web服务接口非常丰富 生成的 Reference cs 有90k左右 我在控制台应用程序中使用网络
  • 使用 Linux 网络设备别名时指定 TCP 套接字的源 IP 地址

    对于一些特定的网络测试 我创建了一个 VLAN 设备 eth1 900 和几个别名 eth1 900 1 和 eth1 900 2 eth1 900 Link encap Ethernet HWaddr 00 18 E7 17 2F 13