Linux 网络编程之原始套接字

1. 介绍

前面主要介绍了流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),基本上能够满足TCP与UDP的应用。但一些问题,我们仍然无法解决,如:

(1)发送一个自定义的IP包

(2)发送ICMP包

(3)侦听网络上的数据包

(4)伪装IP地址

(5)实现自定义的协议

究其原因,标准的套接字与TCP,UDP层打交道,而原始套接字只与IP层,MAC层打交道。


2.原始套接字的类型

(1)socket(AF_INET,SOCK_RAW,IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP);

(2)socket(PF_PACKET,SOCK_RAW,htons(ETH_P_IP|ETH_P_ARP|ETH_P_RAP|ETH_P_ALL));

第一种套接字类型可得到原始的IP包,这样就可以自己组织TCP,UDP,ICMP包了.

第二种套接字能收到发往本地的MAC帧,也能收到从本机发出去的MAC帧(第3个参数为ETH_P_ALL).也能接收到非发住本地的MAC帧(网卡设置为promisc混杂模式)

ETH_P_IP 0X800 只接收发往本机的mac的ip类型的数据帧
ETH_P_ARP 0X806 只接收发往本机的arp类型的数据帧
ETH_P_RARP 0x8035 只接受发往本机的rarp类型的数据帧
ETH_P_ALL 0X3    接收发往本机的MAC所有类型ip,arp,rarp数据帧,接收从本机发出去的数据帧,混杂模式打开的情况下,会接收到非发往本地的MAC数据帧

此时设备无关的物理地址使用struct sockaddr_ll

所以第二种套接字的功能特别强大.

如果设置了IP_HDRINCL套接字选项,那么需要手

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值