- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以下代码是一个旨在发送 ICMP 回显请求和接收回复的程序。
/*
Forgive my lack of error handling :)
*/
SOCKET ASOCKET = INVALID_SOCKET;
struct sockaddr saddr;
struct sockaddr_in *to = (struct sockaddr_in *) &saddr;
struct sockaddr_in from;
int fromsize = sizeof(from);
std::string ip = "[arbitrary ip address]";
struct ICMP {
USHORT type;
USHORT code;
USHORT cksum;
USHORT id;
USHORT seq;
}*_ICMP;
char sendBuffer[sizeof(struct ICMP)];
char recvBuffer[256];
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
memset(&saddr, NULL, sizeof(saddr));
ASOCKET = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
// Configure timeout
DWORD timeoutmilsec = 3000;
setsockopt(ASOCKET, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeoutmilsec, sizeof(timeoutmilsec));
to->sin_family = AF_INET;
inet_pton(AF_INET, ip.c_str(), &(to->sin_addr));
_ICMP = new ICMP();
_ICMP->type = 8;
_ICMP->code = 0;
_ICMP->cksum = 0;
_ICMP->id = rand();
_ICMP->seq++;
// I have omitted my declaration of checksum() for simplicity
_ICMP->cksum = checksum((u_short *)_ICMP, sizeof(struct ICMP));
memcpy(sendBuffer, _ICMP, sizeof(struct ICMP));
if (sendto(ASOCKET, sendBuffer, sizeof(sendBuffer), NULL, (sockaddr *)&saddr, sizeof(saddr)) == SOCKET_ERROR)
{
printf("sendto() failed with error: %u\n", WSAGetLastError());
return false;
}
if (recvfrom(ASOCKET, recvBuffer, sizeof(recvBuffer), NULL, (sockaddr *)&from, &fromsize) == SOCKET_ERROR)
{
if (WSAGetLastError() == TIMEOUTERROR)
{
printf("Timed out\n\n");
return false;
}
printf("recvfrom() failed with error: %u\n", WSAGetLastError());
return false;
}
我的问题是我的 recvfrom()
调用没有收到任何数据并返回 TIMEOUTERROR (10060),尽管 ping 已 已被回复(Wireshark 捕获正在发送的请求和回复)。 sendto()
有效,但 recvfrom()
行为异常,我无法弄清楚问题出在哪里。
我觉得有趣的是 recvfrom()
只有当网关告诉我主机不可达时才会接收数据;如果主机可访问并且已响应 ping,则不会。
最佳答案
问题出在struct ICMP
上。
type
和code
应该是unsigned char
。
ICMP header 应为 8 字节,但 struct ICMP
的大小为 10 字节。
所以应该改成:
struct ICMP {
unsigned char type;
unsigned char code;
USHORT cksum;
USHORT id;
USHORT seq;
}*_ICMP;
关于c++ - 原始 ICMP 套接字 : recvfrom() not recieving any data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42195217/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我想开发一个允许用户通过 Firebase 消息传递相互交互的应用程序,但问题是: 教程和开源项目只能在 Activity 运行时使用:例如,This GitHub Project和 This Sta
我正在努力制作我的基本锁屏应用程序。开始时,该应用程序显示一个基本 Activity 屏幕,带有一个 ImageView (显示存储中的图像)和一个 TextView(显示日期和时间)。向上滑动时,
本帖有更新,看第一个回答 所以,首先,我确实搜索了类似的问题(并找到了一些线程),但没有解决我的问题。我是第一次尝试使用 quasar 框架,也许我在命名空间的某个地方迷路了。 所以,首先,一些信息:
我正在尝试编写一个接收JSON数据的API,我能够接收数据,但不确定如何读取或提取其内容。我的代码行是:。我发送了cURL命令cURL-X POST http://127.0.0.1:8000/pos
我试图通过套接字发送帧,并且在编码后通常是50 000-80 000字节,所以我按循环接收数据,但是由于客户端始终发送帧,因此以下代码中的循环始终不会中断,因此当我运行时什么也没有发生,并且接收循环继
我正在使用 AngularJS,我正在尝试将 json 从我的服务发送到 webAPI Controller 。当我通过发送时,我在 webApi 函数的参数中收到 null。 我的功能服务是: an
我正在使用 C++ 和弯路处理 Hook winsock2 函数的 dll。我的目标是修改进出原始可执行文件的 TCP 流量。在某些时候,我需要停止某些数据包的传递(这样原始可执行文件根本不知道该数据
我正在用 C 语言制作一个简单的 TCP 客户端-服务器,我正在尝试从客户端向服务器发送消息,但我遇到了一些问题。服务器确实发送消息(整数值 > 0)但客户端无法接收它(整数值 > 0)这是代码:客户
在 Apple 的 ObjC 运行时指南中,它描述了 objc_msgSend() 函数对动态调度的作用: It first finds the procedure (method implement
以下代码是一个旨在发送 ICMP 回显请求和接收回复的程序。 /* Forgive my lack of error handling :) */ SOCKET ASOCKET = INVAL
我是这个网站的新手,也是 Android 新手。我正在尝试为 TCP 客户端编写代码。我也可以发送数据并接收数据。我想从 in 缓冲区中读取数据,我可以使用 in.readLine(); ,但这只会读
我做了一个python服务器和一个java客户端。我的问题很简单:服务器收到客户端的消息,但客户端没有得到回复。 Java 客户端: package fgd; import java.io.DataI
我似乎在通过连接表接收产品时遇到问题,这给了我一个奇怪的错误,因为它似乎没有收到我的订单的 ID。我只能假设这是因为订单尚未创建,但无论如何我都会在此步骤中创建订单,因此订单还没有 ID。所以这就是我
我问这个问题是因为我不明白我搜索的问题所提供的解释,所以这个问题可能很常见。我使用另一个人的代码来尝试了解它是如何工作的,以便复制它。在可注入(inject)的方法之一中,原作者返回一个 promis
我有 C 语言的客户端/服务器程序,通过它我可以将文件从服务器传输到客户端。 但客户端甚至在收到文件的最后一个字节后仍在等待 recv。只有当我杀死它或服务器被我杀死时,客户端才会终止。但是服务器必须
在 WPF 4.0 中,如果我在加载用户控件后在窗口中交换用户控件,我似乎无法使用任何键盘快捷键。一个代码示例说了一千个字,所以这就是我正在做的: Window window = new Window
我一直无法找到 oracle.net.ns.Packet.recieve() 方法的文档。此方法仅在选择查询时调用吗?或者它是否也在插入更新等时被调用? 我的应用程序大部分时间都花在了这个方法上。我可
我正在尝试从移动应用程序(用 React Native 编写,现在在 iOS 上运行)上传图像文件。 文件被发送到我的 REST API,如下所示。我遇到了两个问题: 我没有得到 req.body,因
我正在尝试使用 Go 构建一个基本 API,它使用 PostgreSQL library 返回 SQL 查询的结果。 . 目前我可以让程序返回值,但我无法让它向用户返回失败的消息,即一些带有错误消息的
我是一名优秀的程序员,十分优秀!