使用boost asio raw socket创建第2层/ ethernet套接字(在C ++中)

// #include <boost/asio/detail/config.hpp>// #include <boost/asio/detail/socket_types.hpp>// #include <boost/asio/basic_raw_socket.hpp>// #include <boost/asio/ip/basic_endpoint.hpp>// #include <boost/asio/ip/basic_resolver.hp
摘要由CSDN通过智能技术生成
// #include <boost/asio/detail/config.hpp>
// #include <boost/asio/detail/socket_types.hpp>
// #include <boost/asio/basic_raw_socket.hpp>
// #include <boost/asio/ip/basic_endpoint.hpp>
// #include <boost/asio/ip/basic_resolver.hpp>
// #include <boost/asio/ip/basic_resolver_iterator.hpp>
// #include <boost/asio/ip/basic_resolver_query.hpp>
// #include <boost/asio/detail/push_options.hpp>
// #include <boost/asio.hpp>
#include <netinet/if_ether.h>
#include <net/ethernet.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <sys/socket.h>
#include <linux/if_packet.h>
#include <cstddef>
#include <iostream>

#include <boost/asio.hpp>
#include <boost/bind.hpp>

class ipv4_header
{
   
public:
    ipv4_header() {
    std::fill(rep_, rep_ + sizeof(rep_), 0); }

    unsigned char  version() const {
    return (rep_[0] >> 4) & 0xF; }
    unsigned short header_length() const {
    return (rep_[0] & 0xF) * 4; }
    unsigned char  type_of_service() const {
    return rep_[1]; }
    unsigned short total_length() const {
    return decode(2, 3); }
    unsigned short identification() const {
    return decode(4, 5); }
    bool           dont_fragment() const {
    return (rep_[6] & 0x40) != 0; }
    bool           more_fragments() const {
    return (rep_[6] & 0x20) != 0; }
    unsigned short fragment_offset() const {
    return decode(6, 7) & 0x1FFF; }
    unsigned int   time_to_live() const {
    return rep_[8]; }
    unsigned char  protocol() const {
    return rep_[9]; }
    unsigned short header_checksum() const {
    return decode(10, 11); }

    boost::asio::ip::address_v4 source_address() const
    {
   
        boost::asio::ip::address_v4::bytes_type bytes 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值