- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Windows 10 中使用 RAW SOCKET 处理传入的网络数据包。
当我调用 recvfrom()
函数它返回 -1 值。 WSAGetLastError
是 10022。
Microsoft Docs 页面给了我以下描述:
WSAEINVAL: 10022
Invalid argument.
Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.
setsockopt()
设置
IP_HDRINCL
为 1,但当我调用
recvfrom()
时返回相同的错误.
#include "stdio.h"
#include "winsock2.h"
#include "ws2tcpip.h"
int main(){
SOCKET s;
char* buff = malloc(256);
int optval = 1;
struct sockaddr_in adr;
int adr_length = sizeof(adr);
int i;
int rcv_len;
WSADATA wsa;
memset(buff, 0, 256);
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0){
printf("Error in WSAStartup: %d\n", WSAGetLastError());
getch();
return 0;
}
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
if(s == SOCKET_ERROR){
printf("Error in socket creation: %d\n", WSAGetLastError());
getch();
return 0;
}
if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&optval, sizeof(optval)) == -1){
printf("Error in setsockopt(): %d\n", WSAGetLastError());
getch();
closesocket(s);
return 0;
}
while(1){
rcv_len = recvfrom(s, buff, 256, 0, (struct sockaddr*)&adr, &adr_length);
if(rcv_len == -1){
printf("Error in recvfrom(): %d\n", WSAGetLastError());
getch();
break;
}
for(i = 0; i < 256; i ++){
printf("%c", *(buff + i));
}
}
closesocket(s);
return 1;
}
Error in recvfrom(): 10022
最佳答案
我已经解决了这个问题。
缺少什么:
bind()
打开 SOCKET使用您正在处理的接口(interface)的 IP SO_RCVALL
1 与 WSAIoctl()
#include "stdio.h"
#include "winsock2.h"
#include "ws2tcpip.h"
int main(){
SOCKET s;
unsigned char* buff = malloc(32768);
int optval = 1;
struct sockaddr_in adr;
struct sockaddr_in sadr;
int adr_length = 0;
int i;
int in;
int rcv_len;
WSADATA wsa;
memset(buff, 0, 32768);
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0){
printf("Error in WSAStartup: %d\n", WSAGetLastError());
getch();
return 0;
}
s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if(s == SOCKET_ERROR){
printf("Error in socket creation: %d\n", WSAGetLastError());
getch();
return 0;
}
sadr.sin_family = AF_INET;
sadr.sin_addr.s_addr = inet_addr("127.0.0.1");
sadr.sin_port = htons(0);
bind(s, (struct sockaddr*)&sadr, sizeof(sadr));
if(setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&optval, sizeof(optval)) == -1){
printf("Error in setsockopt(): %d\n", WSAGetLastError());
getch();
closesocket(s);
return 0;
}
optval = 1;
WSAIoctl(s, SIO_RCVALL, &optval, sizeof(optval), 0, 0, (LPDWORD) &in, 0, 0);
while(1){
adr_length = sizeof(adr);
rcv_len = recvfrom(s, buff, 32768, 0, (struct sockaddr*)&adr, &adr_length);
if(rcv_len == -1){
printf("Error in recvfrom(): %d\n", WSAGetLastError());
getch();
break;
}
for(i = 0; i < rcv_len; i ++){
printf("%d ", *(buff + i));
}
}
closesocket(s);
return 1;
}
关于c - winsock2:RAW SOCKET recvfrom() 返回错误 10022(无效参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61701164/
我正尝试在一些 native Rust-C 绑定(bind)上构建一个安全的包装器。我正在引用 git2-rs代码库,我遇到了以下用法: use raw; use util::Binding; pub
我想使用用户提供的字符串作为 JavaScript 函数的参数,因此需要转义所有可能导致脚本中断的字符。 这是为了与处理原始 JavaScript 的 WKWebView.evaluateJavaSc
我需要用 C# 解析一个在 Wireshark 中生成的 pcap 文件。当然,它可以使用 wireshark 正常打开并按预期显示所有数据包。 我曾尝试使用我在网上找到的两个流行的库(来自 Shar
knex.raw(sql, bindings)和 knex.schema.raw(statement) . 似乎这两个函数具有不同的签名。 如果它们相等,我该如何使用 knex.schema.raw(
我是这里的新手。 我想知道任何工具/快速方法来转换具有 3 字节 PCM 样本的 24 位 PCM 原始( headless )文件, 成一个 32 位 PCM 原始文件,每个样本有 4 个字节,4
Unhandled rejection Error: where: "raw query" has been removed, please use where ["raw query", [repl
我的任务是打开一个扩展名为 mka 的现有音频文件(Matroska 容器)并提取原始音频数据。 This示例仅显示了从 mp2 文件中提取原始数据的示例。我不知道如何使用 mka 容器执行此操作。我
在 Zend Framework 的 Response Class 中,有两个不同的数组用于存储 header :_headers[] 和 _headersRaw[]。并且有适当的方法来设置每一个:
我们可以直接从Github链接文件吗?。我知道这在谷歌代码上是允许的。这样,我就不必担心更新本地文件了。
在 TCP 中,我从 IP 摄像机接收媒体流作为 RAW。根据那里的建议,我需要把它写成文件。然后我可以用 VLC 等媒体播放器播放它。 但是当我将其写入文件并使用媒体播放器播放时,它永远不会播放损坏
我对码头公司还是个新手。我使用的是最新版本的Python、Django和Docker。我已经在这个项目上工作了两周了,我已经创建了docker-compose.yml文件,并且已经构建了我的docke
我有两只鼠标连接到我的计算机,我想制作一个记录器来区分这两者。低级鼠标 Hook 不向我提供该信息,因此我考虑捕获原始输入消息以获取鼠标的设备实例 ID。但不幸的是,原始输入寄存器仅限于我的应用程序!
我对 Laravel 还很陌生,到目前为止,我真的很喜欢 eloquent 和 querybuilder,但是一旦查询变得更加复杂,我的头就开始受伤......我刚刚完成了相当长一段时间后的 2 个工
我很困惑,真的不知道该如何选择在何处使用这两者? 我都阅读了文档 https://laravel.com/docs/5.4/queries#where-clauses 和 https://larave
mysql 表 -> 表名称td id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, band varchar(4) NOT NULL, PRIMARY KE
我在 ASP.net MVC 中呈现 HTML 页面: @(Html.Raw(@Model.Body)) 用于包含在模型的 Body 属性中的格式化和样式文本,但这会将 CSS 样式更改为整个页面。我
使用以下 python 读取和显示(灰度)RAW 图像: import numpy as np import matplotlib.pyplot as plt path = 'path\\to\\wh
我正在我的应用程序中构建一个 MP3 播放器,但我收到一条错误消息,指出“raw cannot be resolved or is not a field”在线:mMediaPlayer = Medi
我正在尝试使用枚举作为 Hibernate 中 map 的映射键,但 Hibernate 将我的枚举存储为 RAW: 我有这个枚举: public enum AccountType implement
我想在 python 中构建一个数据包嗅探器,它能够嗅探数据包、分析它们并在第二步中将数据包注入(inject)本地接口(interface)。 我找到了一个示例,我必须稍微调整一下才能工作。我的工作
我是一名优秀的程序员,十分优秀!