- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如果我使用以下参数和默认设置打印出在 RAW 套接字上发送的 IP header 的 header 字段值,我看到协议(protocol)号设置为“2”,属于 IGMP。
sock = socket(PF_INET, SOCK_RAW, AF_INET);
但是,如果我使用 TCP header 访问数据包,我会得到大部分字段的正确值,除了数据偏移量得到错误的值。此外,我无法在 Linux 平台 (Ubuntu) 上使用 IGMP header 正确读取 header 。
读出标题:
printf("\n");
printf("IP Header\n");
printf(" |-IP Version : %d\n",(unsigned int)iph->version);
printf(" |-IP Header Length : %d DWORDS or %d Bytes\n",(unsigned int)iph->ihl, ((unsigned int)(iph->ihl))*4);
printf(" |-Type Of Service : %d\n",(unsigned int)iph->tos);
printf(" |-IP Total Length : %d Bytes(Size of Packet)\n",ntohs(iph->tot_len));
printf(" |-Identification : %d\n",ntohs(iph->id));
printf(" |-TTL : %d\n",(unsigned int)iph->ttl);
printf(" |-Protocol : %d\n",(unsigned int)iph->protocol);
printf(" |-Checksum : %d\n",ntohs(iph->check));
printf(" |-Source IP : %s\n",inet_ntoa(source.sin_addr));
printf(" |-Destination IP : %s\n",inet_ntoa(dest.sin_addr));
// IGMP Print
printf("\n");
printf("IGMP Header\n");
printf(" |-IGMP Type : %d\n",(unsigned int)head->igmp_type);
printf(" |-IGMP Code : %d\n",(unsigned int)head->igmp_code);
printf(" |-IGMP Checksum : %d\n",(unsigned int)head->igmp_cksum);
printf(" |-IGMP Address : %s\n",inet_ntoa(head->igmp_group.sin_addr);
这给我错误的 IGMP 数据包:
error: dereferencing pointer to incomplete type
对于所有 4 个字段。
如果我把它当作 TCP 头,它工作正常。
我正在使用 RAW 套接字作为其管理代理在守护进程和 CLI 之间进行通信。
最佳答案
我认为您严重未能理解原始套接字的用途。它们是一种工具,可让您手动组装或检查 IP 数据包的内容,包括 IP 数据包中的高级 header ,这些 header 可以判断它是 TCP、UDP、ICMP、IGMP 等。它们不是一种手段直接使用通信,而是一种在较低级别对现有的较高级别通信方式进行破解的手段。
对于您的应用程序,您几乎肯定需要 TCP 或 UDP 套接字。
关于c - socket(PF_INET, SOCK_RAW, AF_INET) 使用 IGMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936709/
我正在开始套接字编程,并且我不断看到这个 AF_INET。 但是,我从未见过任何其他东西可以代替它。我的讲师没有那么有帮助,只是说“你只是需要它”。 所以我的问题: AF_INET 的用途是什么? 是
我想编写一个可用于大量 AF_INET-SOCK_STREAM 和 AF_INET-SOCK_DGRAM 套接字的守护进程,用于网络调试。 为了避免过度使用资源,我想避免在应用层打开大量端口,但尝试在
查看有关套接字编程的示例,我们可以看到有些人使用AF_INET,而其他人使用PF_INET。此外,有时 both of them are used at the same example 。问题是:它
代码运行正常,现在显示错误 AttributeError: 模块 'socket' 没有属性 'AF_INET' 代码如下:模块名不是socket.py import socket client= s
因此,我在三个位置安装了python:Windows计算机,Pi(运行Kali)和Mac。当导入套接字库或依赖于套接字库的库(即ipwhois)时,我的Mac是唯一出现此错误的计算机。我在sudo中运
我有这个简短的程序: import sys import socket target = "google.co.uk" port = 443 print(target) s = socket.sock
用C语言对Android进行NDK编程:我需要使用以下代码创建一个ICMP套接字: socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP) 失败了。有人知道为什么吗? 最佳
当系统上只有 IPv6 地址可用时,你能打开 AF_INET 套接字吗? 我正在尝试为一个可能只有 IPv6 地址处于事件状态(不是双栈)的系统获取 HWADDR。 我可以使用 AF_INET 打开套
这可能与它无关,但我正在努力将旧的 MFC 应用程序转换为 Unicode。我想我可能会尝试使用 Unicode 字符集制作另一个全新的 MFC 应用程序,只是为了让我头脑清楚一些事情。除此之外,我需
我正在浏览 msdn 的“Getting Started With Winsock”,他们用参数打开了一个套接字 struct addrinfo *result = NULL,
我刚刚开始更好地了解套接字编程,我正在尝试构建一个可以发送和接收消息的简单程序。我遇到了将套接字绑定(bind)到地址以使用它的问题。这是我的- #include "stdafx.h" using n
所以我用 socket(AF_INET, SOCK_RAW, IPPROTO_UDP) 创建了一个套接字。然后我有一个无限循环的 recv() 。我知道它可以捕获所有数据报。但它会阻止数据报到达正确的
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我想知道将 AF_INET 套接字转换为使用 AF_UNIX 的可行性如何。这样做的原因是我有一个程序可以打开 TCP 套接字,但我们无法更改。因此,为了减少开销,我们希望将此套接字绑定(bind)为
我的网络不支持 ipv6,因此我无法访问 ipv6 服务器,是否有任何解决方案可以使用使用“AF_INET”域的套接字连接到它们?或任何其他解决方案?互联网上有没有免费进行此类转换的服务器?我可以读懂
我刚刚开始在 UNIX 中进行套接字编程,并且正在阅读套接字系统调用的手册页。我对 AF_LOCAL 参数及其使用时间感到有点困惑。手册只是说本地通信。 AF_INET 格式是否也适用于本地通信? 最
关闭创建为AF_PACKET 和AF_INET 的套接字之间存在这种时间差异的原因是什么?如何减少 AF_PACKET 的关闭时间? sockfd = socket(AF_PACKET, SOCK_R
当我阅读 AF_INET 时意思是,我得知还有一个家庭叫UNIX domain socket .这里是 wiki link我读到了这个。 我不明白这是什么意思: Unix domain sockets
我一直在 R 中使用 gmailR 从 R 发送电子邮件,没有出现任何问题,但自一周以来它一直出现故障。有时它有效,但大多数时候无效。顺便说一句,这是来自 github 的 Trinker 包(而不是
我有两个简单的进程在两台不同的 linux 机器上运行,一个客户端和一个服务器,它们使用 AF_INET|SOCK_STREAM 套接字相互通信,客户端向服务器发送一个简短的命令字符串,然后服务器响应
我是一名优秀的程序员,十分优秀!