socket用法linux,linux下socket用法

(注意一定要在root下使用)原始套接字编程可以接收到本机网卡上的数据帧或者数据包,对与监听网络的流量和分析是很有作用的.一共可以有3种方式创建这种socket

1.socket(AF_INET, SOCK_RAW,IPPROTO_TCP|IPPROTO_UDP|IPPROTO_ICMP)发送接收ip数据包,不能用IPPROTO_IP,因为如果是用了IPPROTO_IP,系统根本就不知道该用什么协议。

2.socket(PF_PACKET, SOCK_RAW,htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))发送接收以太网数据帧    3.socket(AF_INET, SOCK_PACKET,htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL))过时了,不要用啊      理解一下SOCK_RAW的原理, 比如网卡收到了一个 14+20+8+100+4(以太网头+ip头+udp头+数据+crc)的udp的以太网数据帧.     1.socket(AF_INET, SOCK_RAW, IPPROTO_UDP);    能:该套接字可以接收协议类型为(tcp udp icmp等)发往本机的ip数据包,从上面看的就是20+8+100.    不能:不能收到非发往本地ip的数据包(ip软过滤会丢弃这些不是发往本机ip的数据包).    不能:不能收到从本机发送出去的数据包.    发送的话需要自己组织tcp udp icmp等头部.可以setsockopt来自己包装ip头部    这种套接字用来写个ping程序比较适合     2.socket(PF_PACKET, SOCK_RAW, htons(x));    这个套接字比较强大,创建这种套接字可以监听网卡上的所有数据帧.从上面看就是20+20+8+100.最后一个以太网crc从来都不算进来的,因为内核已经判断过了,对程序来说没有任何意义了.     能:接收发往本地mac的数据帧     能:接收从本机发送出去的数据帧(第3个参数需要设置为ETH_P_ALL)     能:接收非发往本地mac的数据帧(网卡需要设置为promisc混杂模式)        协议类型一共有四个     ETH_P_IP0x800 只接收发往本机mac的ip类型的数据帧     ETH_P_ARP0x806 只接受发往本机mac的arp类型的数据帧     ETH_P_ARP0x8035 只接受发往本机mac的rarp类型的数据帧     ETH_P_ALL0x3 接收发往本机mac的所有类型ip arp rarp的数据帧,接收从本机发出的所有类型的数据帧.(混杂模式打开的情况下,会接收到非发往本地mac的数据帧)        发送的时候需要自己组织整个以太网数据帧.所有相关的地址使用struct sockaddr_ll 而不是structsockaddr_in(因为协议簇是PF_PACKET不是AF_INET了),比如发送给某个机器,对方的地址需要使用structsockaddr_ll.    下面是一部分示例代码:     ......     int sockfd =socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); // 创建Socket   struct sockaddr_ll sll; // 注意结构体是sockaddr_ll   memset( &sll, 0, sizeof(sll) );   sll.sll_family = AF_PACKET;   struct ifreq ifstruct;   strcpy(ifstruct.ifr_name, "eth0");   ioctl(sockfd, SIOCGIFINDEX, &ifstruct);//控制I/O设备   sll.sll_ifindex = ifstruct.ifr_ifindex;   sll.sll_protocol = htons(ETH_P_ALL);   if(bind(fd, (struct sockaddr *) &sll,sizeof(sll)) == -

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值