gpt4 book ai didi

linux - 在 Linux 内核模块中制作 ICMP 数据包

转载 作者:太空狗 更新时间:2023-10-29 11:22:52 25 4
gpt4 key购买 nike

我正在尝试使用 ICMP 协议(protocol)进行试验,并为分析 ICMP 数据包的 linux 创建了一个内核模块(仅当 ICMP 代码字段为魔数(Magic Number)时才处理数据包)。现在要测试这个模块,我必须创建一个 ICMP 数据包并将它发送到运行这个分析模块的主机。事实上,如果我能在内核本身(作为一个模块)中实现它,那就太好了。我在内核中寻找类似 packetcrafter 的东西,我用 google 搜索它发现了很多解释数据包生命周期的文章,而不是创建它的教程。用户空间 packetcrafters 将是我最后的选择,那些高度灵活的工具,比如我可以设置 ICMP 代码等的地方。而且我不担心内核 panic :-) !!!!!欢迎任何包制作想法。

最佳答案

先生,我强烈建议您不要使用内核模块来构建 ICMP 数据包。

您可以使用用户空间原始套接字来制作 ICMP 数据包,甚至可以逐字节构建 IP header 本身。因此,您可以尽可能灵活地使用它。

请看这个

ip = (struct iphdr*) packet;
icmp = (struct icmphdr*) (packet + sizeof(struct iphdr));

/*
* here the ip packet is set up except checksum
*/
ip->ihl = 5;
ip->version = 4;
ip->tos = 0;
ip->tot_len = sizeof(struct iphdr) + sizeof(struct icmphdr);
ip->id = htons(random());
ip->ttl = 255;
ip->protocol = IPPROTO_ICMP;
ip->saddr = inet_addr(src_addr);
ip->daddr = inet_addr(dst_addr);


if ((sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) == -1)
{
perror("socket");
exit(EXIT_FAILURE);
}

/*
* IP_HDRINCL must be set on the socket so that
* the kernel does not attempt to automatically add
* a default ip header to the packet
*/

setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &optval, sizeof(int));

/*
* here the icmp packet is created
* also the ip checksum is generated
*/
icmp->type = ICMP_ECHO;
icmp->code = 0;
icmp->un.echo.id = 0;
icmp->un.echo.sequence = 0;
icmp->checksum = 0;
icmp-> checksum = in_cksum((unsigned short *)icmp, sizeof(struct icmphdr));

ip->check = in_cksum((unsigned short *)ip, sizeof(struct iphdr));

如果这部分代码看起来足够灵活,那么请阅读原始套接字 :D 也许它们是满足您需求的最简单和最安全的答案。

请查看以下链接以获取更多信息
http://courses.cs.vt.edu/~cs4254/fall04/slides/raw_6.pdf
http://www.cs.binghamton.edu/~steflik/cs455/rawip.txt
http://cboard.cprogramming.com/networking-device-communication/107801-linux-raw-socket-programming.html一个很好的主题,在我看来很有用

关于linux - 在 Linux 内核模块中制作 ICMP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10900964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com