Linux下构造UDP原始数据报-DNS报文示例C语言实现

本文展示了一段C语言代码,用于在Linux环境下构造包含DNS数据的UDP原始数据报。代码包括了校验和计算、IP和UDP头部填充以及数据包发送的过程。
摘要由CSDN通过智能技术生成

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/udp.h>


unsigned short checksum(unsigned short *buffer, int size)
{
    unsigned long cksum=0;

    while (size > 1)
    {
        cksum += *buffer++;
  size  -= sizeof(unsigned short);  
    }
    if (size)
    {
        cksum += *(unsigned char *)buffer;  
    }
    cksum = (cksum >> 16) + (cksum & 0xffff);
    cksum += (cksum >>16);

    return (unsigned short)(~cksum);
}

void CalculateCheckSum(
    void    *iphdr,
    struct udphdr *udphdr,
    char    *payload,
    int      payloadlen)
{
    struct iphdr  *v4hdr=NULL;
    unsigned long zero=0;
    char          buf[1000],
                 *ptr=NULL;
    int           chksumlen=0,
                  i;
   
    ptr = buf;

    v4hdr = (struct iphdr *)iphdr;

    // Include the source and destination IP addresses
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值