在网上找了一大圈, 发现linux通过指定网卡发送 数据,基本有2个途径,

1, 通过建立SOCKET的时候就绑定网卡,SO_BINDTODEVICE

2.   建立原始套接字。SOCK_RAW, 填充指定网卡的mac地址发送。

依然没有达到我的要求,我的要求是UDP既然是面向无连接的,我只建立一个UDP,不绑定任何IP地址,但是我发送UDP数据的时候指定从某一个网卡发, 这要怎么做呢?

#include <stdio.h>;
#include <string.h>;
#include <sys/socket.h>;
#include <netpacket/packet.h>;
#include <net/ethernet.h>;
#include <sys/ioctl.h>;
#include <net/if.h>;
#include <assert.h>;

int
main ()
{
        struct sockaddr_ll sll;
        int fd;
        struct ifreq ifr;
        char *dev;

fd = socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

dev = "eth0";
        strncpy ((char *)ifr.ifr_name, dev, sizeof(ifr.ifr_name));
        assert (ioctl (fd, SIOCGIFINDEX, &ifr)==0);

memset (&sll, 0, sizeof(sll));
        sll.sll_family = AF_PACKET;
        sll.sll_protocol = htons (ETH_P_ALL);
        sll.sll_ifindex = ifr.ifr_ifindex;

assert (bind (fd, (struct sockaddr *)&sll, sizeof(sll))==0);

}

230509这种方法肯定是可行的,不过不够方便灵活,用的过程中发现个更好的办法,不过不是适用于所有的场合,要看情况,方法如下:

增加固定路由,比如我的2个网口,一个10.x.x.x 一个172.x.x.x,通增加172网段的固定路由就可以解决172地址的路由问题。10网段可以增加个默认路由

route add -net 172.16.0.0 netmask 255.255.0.0 dev ppp1

route add default dev pp0

linux通过指定网卡发送 数据,实现方式相关推荐

  1. linux下通过伪造udp包来实现指定网卡发送数据

    1.包含头文件 #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #includ ...

  2. 多网卡指定网卡发送数据

    环境: 2个网卡,分别在不同网络环境. 局域网一: 网关:10.9.16.254 电脑地址1:10.9.16.88 局域网二:网关:10.9.24.1 电脑地址2:10.9.24.88 要求: 通过 ...

  3. server2008网卡驱动包_从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造...

    在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题-长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...

  4. Redhat Linux 为指定网卡添加网关

    Redhat Linux 为指定网卡添加网关 为指定网卡添加网关 route add -net 192.168.1.0/24 gw 192.168.1.1 eth1 或者 route add -net ...

  5. linux 指定网卡发数据,让数据包从指定网卡发送

    问题: 一台服务器有多张网卡,要让数据包从指定的发出去,怎么实现,多谢! 假如linux服务器下有几个网卡,且都属于一个网段,通常数据从eth0,发出,那该如何指定一些特殊数据从eth1或eth2 发 ...

  6. linux网卡发送数据包流程,linux内核Ethernet以太网卡驱动收发数据过程

    linux内核Ethernet以太网卡驱动收发数据过程 linux内核Ethernet以太网卡驱动收发数据过程 下图简单描述了网卡驱动与Linux内核之间的联系: 关于上图的一些说明: 系统初始化: ...

  7. 监视和调整Linux网络协议栈:发送数据

    目录 有关监视和调整Linux网络堆栈的一般建议 总览 详细外观 协议族注册 通过套接字发送网络数据 sock_sendmsg,__sock_sendmsg和__sock_sendmsg_nosec ...

  8. linux使用指定网卡ping,Linux下指定源ip进行ping操作的方法

    [序言] 目前在做一台电脑上两个虚拟机之间的通信. 对于每个虚拟机都有两个网卡,一个桥接模式和一个NAT模式. 那么问题来了.... 如果使用简单的ping ip形式的命令得到ping通的结果,只能证 ...

  9. linux串口发送数据程序,linux串口驱动分析——发送数据

    一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数 ...

最新文章

  1. 性能测试分析之带宽瓶颈的疑惑
  2. springboot pom 依赖
  3. Servlet 开发【07】Servlet两种跳转
  4. Android 系统(256)---camera如何dump image buffer大全
  5. Dart入门—控制流程与其他
  6. cxGrid使用笔记
  7. Windows 8 to Go
  8. 公告:CSDN下载频道即将全面改版
  9. CANAPE字体颜色c语言,CANape介绍.doc
  10. 金仓数据库 Oracle 至 KingbaseES 迁移最佳实践 (4. Oracle数据库移植实战)
  11. Project Tungsten:将Apache Spark更接近裸机
  12. 专转本-数学考试大纲
  13. Waited too long for library cache load lock
  14. 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)...
  15. 联想服务器开机滴一下不显示,电脑开机没有滴的一声显示器不亮怎么办 电脑开机故障解决方法【图文】...
  16. 数字化名词解释—数字化
  17. 如何快速搭建个人网站(服务器配置篇)
  18. 如何成为一个全能的机器人工程师
  19. 如何设计用户体验测试用例
  20. 对称排序 nyoj 283

热门文章

  1. 第七次广州软件测试交流会信息公布
  2. Idea中Target文件夹的作用
  3. latex beamer幻灯片生成参考文献列表及参考文献图标
  4. 【译文】ExtJS 4.1性能预览
  5. Exif文件格式描述 Ver1.4
  6. 小米6内存测试软件,小米6有救了?MIUI测试内存扩展技术,原理是什么?
  7. 解读 Rust 2021 Edition RFC
  8. [ACNOI2022]树上构造
  9. zxing的使用及优化
  10. Docker配置腾讯云镜像加速器