zoukankan      html  css  js  c++  java
  • 原始套接字

    在一般的套接字编程中,我们只能读取内核给我们加工以后的IP数据包,并不能直接读取和修改原始的IP数据包,如果我们要修改原始的IP数据包,那么我们就需要原始套接字来接收数据包.

    创建原始套接字

    int socket(AF_INET, SOCK_RAW, protocol);

    这个函数在前面已经介绍过了,这个函数也可以用来创建原始套接字,前面两个参数是一样的,就是最后的一个参数,常见的参数有IPPROTO_TCP(原始TCP套接字),IPPROTO_UDP(原始UDP套接字),IPPROTO_ICMP(原始ICMP套接字)

    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen); //发送数据函数

    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr, socklen_t *addrlen);  //接收数据的函数

    哪几种情况内核会将接收到的IP数据报文传递给原始套接字:

    1、接收到的TCP和UDP绝不传递到任何套接字

    2、ICMP分组会在内核处理完其中的ICMP消息之后传递到原始套接字

    3、IGMP分组同上

    4、内核不认识其协议字段的IP数据报

     注意:必须在管理员权限下才能使用原始套接字

  • 相关阅读:
    centos7.3部署memcached服务
    tomcat一闪而过,无法开启
    Windows系统因“CredSSP加密Oracle修正”无法远程连接
    猴子和打字机
    特修斯之船
    爱因斯坦的光线
    10个著名的思想实验(2)
    10个著名的思想实验1
    快速排序
    快速排序的c++实现
  • 原文地址:https://www.cnblogs.com/CHYI1/p/5515462.html
Copyright © 2011-2022 走看看