问题标签 [raw-sockets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
787 浏览

sockets - 如何将现有的 udp 应用程序迁移到原始套接字

是否有从普通 udp 套接字(使用 linux、C99/C++、recv系统调用)迁移到原始套接字的教程?

根据http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.html 原始套接字比 udp 快得多。

应用程序是客户端-服务器。客户端是专有的,必须使用与 udp 服务器完全相同的协议。但是使用原始套接字服务器可以更快一些。我必须在服务器中实现 udp 的哪些部分?是否有“快速迁移”库?

0 投票
2 回答
6810 浏览

linux - 环回接口上的原始套接字是否可能?

我们正在尝试通过原始套接字与在 Linux 环回接口上侦听的服务器通信,并且似乎服务器没有从我们那里得到一个数据包。我们发送的数据包在 Wireshark 中可见。

环回上的原始套接字是否可能?(请不要问我们为什么需要它:这里解释得太复杂了)

编辑:这就是我们打开它的方式

服务器是 lighttpd,可以通过本地主机上的普通套接字访问。netstat --raw 打印空表,但我绝对确定我们在普通 eth 设备上有两个功能性原始套接字。

0 投票
6 回答
663 浏览

c - strncmp() 和 if() 不同意......我错过了什么?(原始套接字)

我正在尝试构建一个在以太网级别(使用原始套接字)工作的简单回显服务器/客户端。服务器端自己工作并显示 eth0 上的所有传入数据包。客户端工作并在 eth0 上发送以太网数据包(我用 wireshark 检查了这个,可以看到数据包出去了。)我现在想做一个过滤器,只查看我感兴趣的数据包。(这基于目标/源地址。)

在下面的代码中,有人可以向我解释为什么 strncmp 返回零(意味着字符串匹配)但是“if(ethernet_header->h_dest == mac)”无法执行(不匹配)。变量“mac”和“ethernet_header->h_dest”的类型和长度相同。

更多背景知识: - 这是在 linux 64 位(ubuntu)上完成的 - 我在同一台机器上使用 eth0 来发送/接收......我认为这应该不是问题吗?

我只是不明白为什么 strcmp 会返回匹配项,而如果没有。我错过了什么??

0 投票
1 回答
534 浏览

c++ - 在 Linux 中使用原始套接字时,802.3 标头长度始终为 256

我有以下代码来打开一个原始套接字并通过它发送。在发送函数中,我有一条跟踪语句,显示我的数据包长度为 21。但是,当我使用数据包嗅探器查看接收端的数据包时,我看到:

  1. 实际数据包长度为 60。
  2. 长度(在 802.3 标头中给出)为 256。

这些数字都不是 21,我正在与不喜欢这种差异的嵌入式设备进行通信。我已经用谷歌搜索了,但我不知道如何让 sendto() 报告正确的长度。

编辑:我发现该字段被设置为我的 sockaddr_ll 结构中的 sll_protocol 字段。但为什么?将其设置为 htons(ETH_P_802_2) 并没有帮助。

0 投票
2 回答
1577 浏览

c++ - 我应该使用什么作为 C++ 中的缓冲区来从网络套接字接收数据?

我正在使用带有 C++ 的套接字。该程序只是请求一个 HTTP 页面,将其读入一个缓冲区buf[512],然后显示该缓冲区。然而,页面可以包含比缓冲区更多的数据,因此如果没有剩余空间,它将被切断。我可以使缓冲区大小更大,但这似乎不是一个好的解决方案。这是我正在使用的代码:

在 C++ 中用作缓冲区的 char 数组的替代方法是什么?

0 投票
2 回答
2959 浏览

c - 如何在 C 中设置不分段 (IP_DF) 标志

我想在 IP 数据包上设置 Don't Fragment 标志。setsockopt()有没有办法通过函数或函数的标志来做到这一点sendto()

我可以使用“普通”套接字执行此操作,还是必须使用原始套接字并自己构建整个 IP 标头,将其偏移字段设置为IP_DF(在 ip.h 中定义)?

0 投票
3 回答
6271 浏览

assembly - 汇编器中的低级网络(x86 兼容)

我希望用汇编程序编写一个能够发送和接收网络数据包的可引导程序。我不想使用任何库,我想自己创建它(并在这样做的同时学习)。不幸的是,我找不到任何有关与最低级别的网卡通信的信息(发送原始套接字)。OUT我相信使用和说明是必要的IN,虽然我找不到任何关于分配给网卡的端口的信息(或者如何找到它,如果它并不总是相同的话)。有人能指出我正确的方向吗?;-)

0 投票
3 回答
11220 浏览

c - 原始套接字 sendto 在 Linux 上使用 C 失败

我正在尝试使用 UDP 发送一个原始数据包,其中包含我在代码中构建的 IP 和 UDP 标头。使用 .成功初始化原始数据包socket(PF_INET, SOCK_RAW, IPPROTO_UDP)并设置套接字选项setsockopt(sd, IPPROTO_IP, IP_HDRINCL, val, sizeof(int))

问题是当我使用 发送数据包时sendto(),我收到错误消息“消息太长”。

我的 IP 头是 20 个字节,UDP 头是 8 个字节,我的数据是 12 个字节。所以总共只有40个字节。对于单个 UDP 数据包,这不可能太长。有人可以帮忙吗?

的类型val是指向int

这是我的代码:

0 投票
1 回答
3638 浏览

python - python socket.PF_PACKET

我正在尝试使用python发送一个ARP请求,使用dpkt,我发现了一些使用的示例代码:

我知道您需要使用原始套接字来发送它,但它说 socket.PF_PACKET 不存在。我在 python 文档中没有看到任何关于它的内容。那么,这个人从哪里得到 PF_PACKET,它会做什么,我怎样才能得到它?

0 投票
2 回答
7823 浏览

python - 如何在python程序中嵌入C代码?

我想使用多线程原始套接字编写一个程序来扫描python中的端口我有一个用于注入原始套接字的C代码。我想执行 ACK 扫描,所以需要一个原始套接字。

所以请帮助我。

谢谢你