如何在linux中用C设置IP地址

2024-02-07

通过使用strace and ifconfig,我发现可以这样设置IP地址:

#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <string.h>

int main(int argc, const char *argv[]) {
    struct ifreq ifr;
    const char * name = "eth1";
    int fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);

    strncpy(ifr.ifr_name, name, IFNAMSIZ);

    ifr.ifr_addr.sa_family = AF_INET;
    inet_pton(AF_INET, "10.12.0.1", ifr.ifr_addr.sa_data + 2);
    ioctl(fd, SIOCSIFADDR, &ifr);

    inet_pton(AF_INET, "255.255.0.0", ifr.ifr_addr.sa_data + 2);
    ioctl(fd, SIOCSIFNETMASK, &ifr);

    ioctl(fd, SIOCGIFFLAGS, &ifr);
    strncpy(ifr.ifr_name, name, IFNAMSIZ);
    ifr.ifr_flags |= (IFF_UP | IFF_RUNNING);

    ioctl(fd, SIOCSIFFLAGS, &ifr);

    return 0;
}

但我对这个解决方案不太满意:

inet_pton(AF_INET, "10.12.0.1", ifr.ifr_addr.sa_data + 2);

这样做的“正确”方法是什么?


没有魔法+2的IPv4的“正确”方法:

struct sockaddr_in* addr = (struct sockaddr_in*)&ifr.ifr_addr;
inet_pton(AF_INET, "10.12.0.1", &addr->sin_addr);

要使用 IPv6,请将其转换为sockaddr_in6

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

如何在linux中用C设置IP地址 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • MEX 文件中的断言导致 Matlab 崩溃

    我正在使用mxAssert 宏定义为matrix h在我的 C 代码中 mex 可以完美编译 当我调用的 mex 代码中违反断言时 该断言不会导致我的程序崩溃 而是导致 Matlab 本身崩溃 我错过了什么吗 这是有意的行为吗 当我查看 M
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 捕获 foreach 条件中抛出的异常

    我有一个foreach在 foreach 本身的条件下循环期间中断的循环 有没有办法try catch抛出异常然后继续循环的项 这将运行几次 直到异常发生然后结束 try foreach b in bees exception is in
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • C# using 语句、SQL 和 SqlConnection

    使用 using 语句 C SQL 可以吗 private static void CreateCommand string queryString string connectionString using SqlConnection c
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 如何创建一个 ImageView 填充父级高度并显示尽可能大的 Image?

    我有一个按以下方式定义的 ImageView
  • 从 C# 运行宏 [重复]

    这个问题在这里已经有答案了 我知道你可以使用Microsoft Office Interop Excel 在 C 程序中使用 VBA 命令 我有接近 10 000 行代码的 VBA 将其转换为 C 兼容命令是不现实的 它创建一个工作簿并执行
  • 有没有更好的方法来控制子进程的 PYTHONPATH?

    我有一组必须动态修改 os sys path 的脚本 然后脚本启动一个子进程 理想情况下 子进程应与调用者具有相同的 os sys path 我想避免将其作为参数传递 因为这需要修改子进程脚本 我有可以运行并满足我所有需求的代码 我想知道是
  • 尝试将所有组件更改为es6

    我正在尝试将所有组件更改为 es6 我做了两个 但不知道第三个该怎么做 你能告诉我如何改变它吗 下面提供我的代码 export default class FirstTimeTab extends React Component getIn
  • Twig 与 Symfony 2 显示 prod 和 dev 之间不同的 json 编码变量

    我们正在构建一个 Symfony 2 应用程序 它将一些数据从控制器发送到视图 控制器 user array configuration gt array levels gt array warning gt 0 05 danger gt
  • 缩放数组(矩阵)

    该程序的目的是创建一个更大的字节数组 将原始数组放大 10 倍 例如 0 0 中的 1 应该是新数组中由 1 组成的 10x10 正方形 我提供了代码和输出 它们在填充较大数组期间似乎可以正常工作 但随后会打印不同的值 我目前正在尝试仅使用
  • browser.sleep 和 browser.pause 不会被执行

    我是量角器和打字稿的新手 现在正在尝试 PoC 框架 但是 我想知道为什么 browser sleep 或 browser pause 在以下场景中不被执行 第一步通过后测试立即退出 Given I access the Catalogue
  • 向当前日期添加一个月

    我必须在今天的日期上添加一个月 并且必须获得 1 个月后的日期 有人可以帮忙吗 Dim newDate as DateTime DateTime Now AddMonths 1
  • 套接字失去连接

    我知道 Twisted 可以很好地做到这一点 但是如果只是简单的套接字呢 你如何判断套接字中的连接是否随机丢失 就像 如果我的互联网在一秒钟内停止并重新连接 我假设你正在谈论 TCP 如果您的互联网连接中断了一秒钟 您可能根本不会丢失 TC
  • 从java中的.p7b文件中提取单个.cer证书

    我是密码学新手 如果您认为这是一个基本问题 请原谅 我有一个 p7b 文件 我需要读取并提取各个公共证书 即 cer 文件并将其存储在密钥存储中 我不必担心密钥存储中的持久性 因为已经有一个服务将 cer 文件作为byte 并保存它 我想知
  • mysql_insert_id();成功插入行后不返回值

    我发誓我已经在这个网站和其他网站上倾注了所有其他类似的问题 但我想我只是错过了一些东西 希望有人能指出我的大脑向我隐藏的一个愚蠢的错误 我的脚本将表单中的值插入到名为 notes 的表中 此时 它通过名为 newRelationship 的
  • 查找一天中花费的时间以及所花的工间休息时间

    我现在的情况是 我需要找出一些内部申请在办公室花费的总时间 我有这样的样本数据 Id EmployeeId ScanDateTime Status 7 87008 2018 08 02 16 03 00 227 1 8 87008 2018
  • 如果我不设置缓存过期会发生什么

    我正在 google pagespeed Insights 上测试我的页面 它返回 在静态资源的 HTTP 标头中设置到期日期或最长期限 指示浏览器从本地磁盘而不是通过网络加载以前下载的资源 我的假设是 如果我不设置过期时间 我的文件将永远
  • 如果所有子域都指向网站根目录,是否需要通配符 SSL 证书

    我对 SSL 证书完全陌生 需要很快购买一个 当子域名发挥作用时 价格似乎会大幅上涨 我的问题是这样的 我已经设置了我的网站 以便用户名 domain com通过 htaccess 重写为域名 com user 用户名 如果我将网站设置为所
  • Java ASM 字节码修改-更改方法体

    我有一个罐子里的类的方法 我想与我自己的主体交换 在这种情况下 我只想让该方法将 GOT IT 打印到控制台并返回 true 我正在使用系统加载器来加载 jar 的类 我使用反射使系统类加载器能够通过字节码加载类 这部分似乎工作正常 我正在
  • 如何将列与 Flexbox 对齐?

    我目前正在学习 Flexbox 布局 但找不到解决我的问题的方法 我尝试使用 justify content 和 flex basis 但它不起作用 有人有解决办法吗 The result I would like section disp
  • .NET Core RC2 中的登录声明

    我正在将 NET 4 6 版本移植到 NET Core RC2 并想知道如何在 NET Core RC2 中执行以下操作 public async Task
  • 如何在 SQL Server 中将多行转换为列?

    如何将存储为多行的字段转换为列 我也在下面列出了代码 下面是所需内容的示例 但实际上最多可以包含 20 列 谢谢 COL1 COL2 COL3 TEST 30 NY TEST 30 CA TEST2 10 TN TEST2 10 TX 我希
  • DialogFragment 行为异常

    您好 我已使用此 DialogFragment 在我的应用程序中显示日期选择器 public class DateDialogFragment extends DialogFragment implements DatePickerDial
  • 如何在linux中用C设置IP地址

    通过使用strace and ifconfig 我发现可以这样设置IP地址 include