免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3193 | 回复: 6
打印 上一主题 下一主题

SOCKET为AF_INET, SOCK_RAW类型的时候能否保留MAC信息? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-11 20:41 |只看该作者 |倒序浏览
SOCKET为AF_INET, SOCK_RAW类型的时候能否保留MAC信息?

如修改为PF_PACKET类型,匹配的报文太多,需要在应用层分拣,测试影响性能还比较明显。

所以想保留AF_INET, SOCK_RAW但不知如何获得MAC层信息?

论坛徽章:
0
2 [报告]
发表于 2010-07-13 20:55 |只看该作者
raw socket 读取链路层数据,能拿到mac地址

论坛徽章:
0
3 [报告]
发表于 2010-07-13 21:15 |只看该作者
直接用 AF_INET, SOCK_RAW 好像不行~~
需要PF_PACKET  SOCK_RAW!
但我现在不想换~~
也许必须的换~

论坛徽章:
0
4 [报告]
发表于 2010-07-14 12:28 |只看该作者
AF_INET, SOCK_RAW不需要关心MAC地址吧

论坛徽章:
0
5 [报告]
发表于 2010-07-14 14:10 |只看该作者
回复 4# 0vk0


    设计的特殊要求~~

论坛徽章:
0
6 [报告]
发表于 2010-07-14 14:15 |只看该作者
思路就有问题,你要获取同一个网段的远程ip的mac地址,先去查自己的arp表,有没有这个地址对应的mac地址,没有的话发个udp包给这个地址,然后再查一下有没有.如果是其他网络的ip地址,那么除非通向这个ip的所有路由器都开放snmp查询mac功能,要不然你最多查到你网关的mac地址.socket已经是ip层的东西,你要查mac是数据链路层的,基本概念就出问题了.

论坛徽章:
0
7 [报告]
发表于 2010-07-14 18:14 |只看该作者
本帖最后由 Roemer 于 2010-07-14 18:18 编辑

回复 6# samlumengjun


    你这个是通用思路,我们有特殊的用途,我要的也不仅是MAC.
    这个不讨论了,内核在作IP RAW的时候只把sk_buff->data以后的数据返给了应用,
    sk_buff->mac_header的部分就丢了.
    所以我们自己实现了需要的socket.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP