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下,每个输出后都要加一个 ;

  • 相关阅读:
    Python 学习笔记 11.模块(Module)
    Python 学习笔记 8.引用(Reference)
    Python 学习笔记 9.函数(Function)
    Python 学习笔记 6.List和Tuple
    Python 学习笔记 4.if 表达式
    Python 学习笔记 2.自省
    Python 学习笔记 3.简单类型
    Python 学习笔记 7.Dictionary
    Python 学习笔记 5.对象驻留
    Python 学习笔记 10.类(Class)
  • 原文地址:https://www.cnblogs.com/adelep/p/6056272.html
Copyright © 2011-2022 走看看