如何知道接收到的广播包是从哪个网络端口接收到的?

shuianle 2009-04-14 03:59:07
我的机器上有两块网卡, 当我接收到一个广播包之后, 我怎么知道是从哪个网卡上接收到的?
...全文
554 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
海枫 2009-05-07
  • 打赏
  • 举报
回复
楼主没有露面了,不知道他(她)写的是那个层面的程序,kernel, user space, etc?
windboy_linux 2009-04-27
  • 打赏
  • 举报
回复
用LINUX下面的Netfilter机制就能很轻松的达到
Cpp权哥 2009-04-24
  • 打赏
  • 举报
回复
你用两个socket分别绑定一个网卡就行了。
Wenxy1 2009-04-24
  • 打赏
  • 举报
回复
sk_buff关联了网卡设备,linyt网友讲对了。
海枫 2009-04-20
  • 打赏
  • 举报
回复
rsfd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);

struct sockaddr_in cli_addr;
socklen_t cli_addr_len;

recvfrom(rsfd, buf, buf_len, flags, &cli_addr, &cli_addr_len);

然后查看cli_addr的地址就可以知道它来自哪个网卡了。
shuianle 2009-04-15
  • 打赏
  • 举报
回复
谢谢楼上的回答, 又学到东西了.
不过我这里的应用是广播, 广播的话只能bind到广播地址, 所以根据bind来判断是无法区分的吧?

我实际的应该我找到了别的投机的办法, 用arping.
不过还是很希望能知道此问题的答案
海枫 2009-04-14
  • 打赏
  • 举报
回复
如果是kernel space的代码,通过skb->dev就可以知道是那个设备上提交过来的包了。
user space的代码,如果你的socket是IP层的raw的话,应该要在receive前把网卡bind到socket里,此后只能收此卡和socket函数指定协议的报文了,其它socket类型应该类似!

如果是用tcpdump来抓包的话,请使用-e选项来显示报文的mac地址,又或者只tcpdump一个网卡。

...

FYI
shuianle 2009-04-14
  • 打赏
  • 举报
回复
这里用广播是应为实际的ip可能会 ping 不通的情况.
对端地址应该不能知道本地的地址吧?
抓包工具是可以, 不过我是要自己代码实现,
谢谢你们的回答
  • 打赏
  • 举报
回复
..用抓包工具,可以显示是那块网卡接收的数据.
morris88 2009-04-14
  • 打赏
  • 举报
回复
貌似从对端地址应该知道从那个网卡来的吧...

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧