zoukankan      html  css  js  c++  java
  • NS3网络仿真(9): 构建以太网帧

    快乐虾

    http://blog.csdn.net/lights_joy/

    欢迎转载,但请保留作者信息


    NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧。


    以下是一个典型的ARP请求帧:


    我们就用Packet来创建一个同样的帧。

    首先创建一个空的数据包:

        Ptr<Packet>pkt = Create<Packet>();


    接下来加上ARP头:


        //加入arp

        ArpHeader ah;

        ah.SetRequest(Mac48Address("00:50:56:c0:00:01"),"192.168.24.1",

            Mac48Address("00:0c:29:e6:e9:cd"),"192.168.24.129");

        pkt->AddHeader(ah);


    这里的SetRequest用以设置ARP包的内容。


      /**

       * rief Set the ARP request parameters

       * param sourceHardwareAddress the sourcehardware address

       * param sourceProtocolAddress the source IPaddress

       * param destinationHardwareAddress thedestination hardware address (usually the broadcast address)

       * param destinationProtocolAddress thedestination IP address

       */


      void SetRequest (AddresssourceHardwareAddress,

                       Ipv4AddresssourceProtocolAddress,

                       AddressdestinationHardwareAddress,

                       Ipv4AddressdestinationProtocolAddress);


    在内存中能够非常清楚地看见此操作加入的内容:


    接下来为此ARP帧加上以太帧的帧头:


        //加入以太网头

        EthernetHeader eh;

        eh.SetDestination("00:0c:29:e6:e9:cd");

        eh.SetSource("00:50:56:c0:00:01");

        eh.SetLengthType(ArpL3Protocol::PROT_NUMBER);

        pkt->AddHeader(eh);


    再看看生成的数据包的内容:


    哈哈。这就和我们从网络上抓下来的包一模一样了!




    
  • 相关阅读:
    线性回归学习历程
    CART决策树的学习历程
    markdown测试
    开张大吉+代码测试
    使用tomcat启动dubbo项目
    ThreadLocal 工作原理、部分源码分析
    Dubbo项目demo搭建
    redis 操作 list 的测试
    redis 操作 hash 的测试
    redis 操作string 的测试
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7162707.html
Copyright © 2011-2022 走看看