当前位置:  技术问答>linux和unix

原始套接字中自定义协议问题

    来源: 互联网  发布时间:2016-06-09

    本文导语:  我在Linux上用SOCK_RAW发送接收数据,协议号定义为0x1111,我使用htons(ETH_P_ALL)可以就收到自己的数据,但也收到很多垃圾数据(比如ip的包),我用htons(0x1111)尝试接收自己的数据,但什么也收不到,谁知道怎么回事呀,谢...

我在Linux上用SOCK_RAW发送接收数据,协议号定义为0x1111,我使用htons(ETH_P_ALL)可以就收到自己的数据,但也收到很多垃圾数据(比如ip的包),我用htons(0x1111)尝试接收自己的数据,但什么也收不到,谁知道怎么回事呀,谢谢。

|
注意接受的时候


1) socket(PF_PACKET, SOCK_RAW, htons(你的协议));

2)  初始化一个 2层的sockaddr 类似于

struct sockaddr_ll lladdr;
注意
sll_protocol = htons(你的协议)

3)  sockfd bind 上 sockaddr

4) recvfrom 

好了现在,开始底层的网卡帮你过滤不是你的协议的封包了。
初始化sockaddr_ll 比较繁琐  还要知道 接口 ifindex 接口mac地址。

|
socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧

你贴下代码吧。

SOCK_RAW可以参考这个例子

http://blog.chinaunix.net/u2/62281/showart_1096746.html

|



          根据协议的类型不同可以创建不同类型的原始套接字

|


呵呵,非 ip 协议处理么,在 unp 中描述 raw socket 为:
Raw sockets provide three features not provided by normal TCP and UDP sockets:

Raw sockets let us read and write ICMPv4, IGMPv4, and ICMPv6 packets. The ping program, for example, sends ICMP echo requests and receives ICMP echo replies. (We will develop our own version of the ping program in Section 28.5.) The multicast routing daemon, mrouted, sends and receives IGMPv4 packets.

This capability also allows applications that are built using ICMP or IGMP to be handled entirely as user processes, instead of putting more code into the kernel. The router discovery daemon (in. rdisc under Solaris 2.x; Appendix F of TCPv1 describes how to obtain the source code for a publicly available version), for example, is built this way. It processes two ICMP messages (router advertisement and router solicitation) that the kernel knows nothing about.

With a raw socket, a process can read and write IPv4 datagrams with an IPV4 protocol field that is not processed by the kernel. Recall the 8-bit IPv4 protocol field in Figure A.1. Most kernels only process datagrams containing values of 1 (ICMP), 2 (IGMP), 6 (TCP), and 17 (UDP). But many other values are defined for the protocol field: The IANA's "Protocol Numbers" registry lists all the values. For example, the OSPF routing protocol does not use TCP or UDP, but it uses IP directly, setting the protocol field of the IP datagram to 89. The gated program that implements OSPF must use a raw socket to read and write these IP datagrams since they contain a protocol field the kernel knows nothing about. This capability carries over to IPv6 also.

With a raw socket, a process can build its own IPv4 header using the IP_HDRINCL socket option. This can be used, for example, to build UDP and TCP packets, and we will show an example of this in Section 29.7.

貌似做不到吧...

|
socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))

|


可能实情不是这样,俺们公司也使用自定义的协议 0x8x8x 收发都没问题,看看是不是其他情况。 

|
说错  不是底层网卡  应该是 linux操作系统 帮你过滤

    
 
 

您可能感兴趣的文章:

  • TCP连接中创建的监听描述字和已连接描述字(套接字)对应的是同一个套接口么,如果是的话,读写数据时系统怎么区分是哪个套接字的?
  • 监听套接字listenfd 已连接套接字connectfd 中fd什么意思
  • 请问原始套接字的绑定和一般都的套接字的绑定有什么区别吗
  • 非阻塞套接字
  • 关于linux套接字的问题
  • TCP套接字抓包的问题
  • Unix Domain套接字的Java包 junixsocket iis7站长之家
  • socket套接字群发?
  • linux下原始套接字创建失败
  • SOCKET 编程之从容关闭套接字如何实现????
  • Linux 套接字的问题
  • 如何判断套接字是被关闭了。
  • 请问linux下套接字读就绪产生什么信号
  • Linux下如何在普通用户下创建原始套接字(实现ping)
  • 多线程close() socket套接字的问题
  • udp套接字能否设定成非阻塞模式?
  • 套接字
  • 关于数据报套接字的使用
  • 请教高手:linux原始套接字问题
  • 请问各位大侠:如何将标准输出定位到套接字?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • [求助]关于unix域套接字
  • 关于子进程间共享套接字描述符的问题?
  • write函数往套接字文件描述符写入数据的时候数据存储在哪里 ?
  • 套接字是进程私有的资源吗?
  • 类unix系统编写大规模响应网络服务程序使用什么套接字模型
  • 使用原始套接字来发送一个icmp包,不适用setsockopt做控制会怎么样?
  • 请问一般套接字的绑定和原始套接字的绑定有什么区别吗
  • Unix Domain套接字的Java包 junixsocket
  • socket(套接字)怎么传输二进制数据?急
  • 高分求教:有关套接字建立ftp的问题
  • select 处理套接字文件描述符
  • 请教套接字中的select()函数问题
  • 套接字中,第二个参数SOCK_RAW 与SOCK_PACKET 有什么区别
  • 请教高人:同一个套接字(做客户端)连接到server后在不同子进程里使用能否不采取互斥措施收发?
  • 如果使用套接字编程,增样控制连接超时?
  • 高分求高手赐教-关于linux下进程共享TCP套接字的问题
  • 一个未连接的客户端socket套接字在select处的奇怪行为
  • 请问在Unix/Linux上的套接字模型有那些,那些比较常用,Apache使用的是那个,谢谢?!如果能和Windows上的作对比就更好了
  • 请问在vmware虚拟机下的UBUNTU系统里,原始套接字sock_raw能否正常收发数据
  • 套接字的疑惑


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3