linux通过指定网卡发送 数据,实现方式
在网上找了一大圈, 发现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通过指定网卡发送 数据,实现方式相关推荐
- linux下通过伪造udp包来实现指定网卡发送数据
1.包含头文件 #include <sys/types.h> #include <sys/socket.h> #include <sys/un.h> #includ ...
- 多网卡指定网卡发送数据
环境: 2个网卡,分别在不同网络环境. 局域网一: 网关:10.9.16.254 电脑地址1:10.9.16.88 局域网二:网关:10.9.24.1 电脑地址2:10.9.24.88 要求: 通过 ...
- server2008网卡驱动包_从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造...
在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题-长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...
- Redhat Linux 为指定网卡添加网关
Redhat Linux 为指定网卡添加网关 为指定网卡添加网关 route add -net 192.168.1.0/24 gw 192.168.1.1 eth1 或者 route add -net ...
- linux 指定网卡发数据,让数据包从指定网卡发送
问题: 一台服务器有多张网卡,要让数据包从指定的发出去,怎么实现,多谢! 假如linux服务器下有几个网卡,且都属于一个网段,通常数据从eth0,发出,那该如何指定一些特殊数据从eth1或eth2 发 ...
- linux网卡发送数据包流程,linux内核Ethernet以太网卡驱动收发数据过程
linux内核Ethernet以太网卡驱动收发数据过程 linux内核Ethernet以太网卡驱动收发数据过程 下图简单描述了网卡驱动与Linux内核之间的联系: 关于上图的一些说明: 系统初始化: ...
- 监视和调整Linux网络协议栈:发送数据
目录 有关监视和调整Linux网络堆栈的一般建议 总览 详细外观 协议族注册 通过套接字发送网络数据 sock_sendmsg,__sock_sendmsg和__sock_sendmsg_nosec ...
- linux使用指定网卡ping,Linux下指定源ip进行ping操作的方法
[序言] 目前在做一台电脑上两个虚拟机之间的通信. 对于每个虚拟机都有两个网卡,一个桥接模式和一个NAT模式. 那么问题来了.... 如果使用简单的ping ip形式的命令得到ping通的结果,只能证 ...
- linux串口发送数据程序,linux串口驱动分析——发送数据
一.应用程序中write函数到底层驱动历程 和前文提到的一样,首先先注册串口,使用uart_register_driver函数,依次分别为tty_register_driver,cdev_init函数 ...
最新文章
- 性能测试分析之带宽瓶颈的疑惑
- springboot pom 依赖
- Servlet 开发【07】Servlet两种跳转
- Android 系统(256)---camera如何dump image buffer大全
- Dart入门—控制流程与其他
- cxGrid使用笔记
- Windows 8 to Go
- 公告:CSDN下载频道即将全面改版
- CANAPE字体颜色c语言,CANape介绍.doc
- 金仓数据库 Oracle 至 KingbaseES 迁移最佳实践 (4. Oracle数据库移植实战)
- Project Tungsten:将Apache Spark更接近裸机
- 专转本-数学考试大纲
- Waited too long for library cache load lock
- 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)...
- 联想服务器开机滴一下不显示,电脑开机没有滴的一声显示器不亮怎么办 电脑开机故障解决方法【图文】...
- 数字化名词解释—数字化
- 如何快速搭建个人网站(服务器配置篇)
- 如何成为一个全能的机器人工程师
- 如何设计用户体验测试用例
- 对称排序 nyoj 283