zoukankan      html  css  js  c++  java
  • UDP headers and checksum

    UDP headers

    Headers for computing checksum

    The checksum computation is similar to the Internet checksum computation.

    #include <bits/stdc++.h>
    #define DBG(x) cerr << #x << " = " << x << endl
    
    using namespace std;
    typedef long long LL;
    
    unsigned short checksum(const vector<unsigned short> &v) {
        unsigned int sum = 0;
        for (int i = 0; i < v.size(); i++) {
            sum += v[i];
        }
        while (sum > 0xFFFF) {
            sum = (sum & 0xFFFF) + (sum >> 16);
        }
        return ~sum;
    }
    
    int main(int argc, char **argv) {
        vector<unsigned short> vec{
                // UDP pseudo-header
                0x0a01, 0xbf44, // source IP address
                0x0a02, 0x0002, // destination IP address
                0x0011 /* 1 byte zero and 1 byte protocol number */, 0x0023, // UDP length
    
                // UDP header
                0xc183, 0x0035, // source port number and destination port number
                0x0000, 0x0023, // checksum and UDP length
    
                // data
                0x06b0, 0x0100,
                0x0001, 0x0000,
                0x0000, 0x0000,
                0x0562, 0x6169,
                0x6475, 0x0363,
                0x6f6d, 0x0000,
                0x0100, 0x0100, // the length of this UDP packet is odd and the last short is 0x01, so we should pad 1 byte zero.
    
        };
        unsigned short sum = checksum(vec);
    
        printf("checksum = 0x%X
    ", sum);
        assert(sum == 0x22E4);
    
        vec[8] = sum;
    
        sum = checksum(vec);
        assert(sum == 0);
        printf("0x%X
    ", sum);
    
        return 0;
    }
    
  • 相关阅读:
    Java遍历包中所有类方法注解
    mysql字符集问题
    mybatis查询mysql的datetime类型数据时间差了14小时(时区问题)
    mysql 查询的一次bug
    redis分布式锁超时事故
    maven 多个镜像
    maven deploy
    DFS( 修改)
    poj.org --map-- 1002
    nyist 58 最少步数
  • 原文地址:https://www.cnblogs.com/ToRapture/p/12786340.html
Copyright © 2011-2022 走看看