zoukankan      html  css  js  c++  java
  • icmp_ping学习笔记

    1.用字符串指针做为发送缓冲区和接收缓冲区的指针;

    2.icmp报文类型结构体可自行定义,也可用<netinet/ip_icmp.h>中定义好的strcut icmp结构体;

    3.ip_hl*4表示ip头部长度;

    4.剥离头部的含义:让数据部分的指针指向数据部分,找到数据部分所在的内存地址;

    5.原始套接字的接收:对于某个协议的原始套接字,若不进行其他额外的操作,则此原始套接字会接收所有发向本机的数据部分为其协议类型的IP数据包,若调用connect(),则此套接字只接收与其连接的那个IP发来的IP数据报。

    6.原始套接字面向IP层,因此对于原始套接字来说没有端口这个概念,对于某个进程创建的原始套接字,无法保证其收到的数据是发向其所在的进程的,需要根据收到的报文包的某个字段与进程id相比较来判断此报文是否是发向其所在进程的;

    7.注意sin_addr是个结构体类型,不能将ip值以sockaddr_in.sin_addr=ip形式进行赋值,正确赋值方式:sockaddr_in.sin_addr.s_addr=ip;

    8.只有root身份才能创建原始套接字;

    9.调用库函数之后,要根据其返回值判断函数是否调用成功,若失败则输出错误信息并退出程序;

    10.char *p="icmp";sizeof(p)表示指针类型的长度而非“icmp“的字节数;

    11.vim下,每个输出后都要加一个 ;

  • 相关阅读:
    C++-struct类的新特性当class用
    rbenv、fish 與 VSCode 設置之路
    angularJS进阶阶段(4)
    插入排序
    Vimium
    Design Patterns 25
    Mysql(或者sqlite), Mongo中update Column + 1
    Hexo
    继承
    Gradle的依赖方式——Lombok在Gradle中的正确配置姿势
  • 原文地址:https://www.cnblogs.com/adelep/p/6056272.html
Copyright © 2011-2022 走看看