问题标签 [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.
ruby - Mac + Ruby:无法访问 Socket 的 ioctl?怎么修?
一天中的好时光。
红宝石代码:
它的作用:获取接口的mac地址。
按预期在 Debian 上工作。但在 Mac OS X 上,我收到错误:“ioctl”:套接字不支持操作(Errno::EOPNOTSUPP)
无论如何要修复/传递此错误消息并开始ioctl
使用套接字?
android - 可以在同一台机器上安全地运行多个 Android 模拟器并使用套接字进行通信吗?
我想在一台笔记本电脑(最坏的情况)或专用网络上的多台机器上模拟一个小型 Android 设备集群。这是用于测试 Android 上的通信和进程迁移。
是否有一种安全的方法可以从 Eclipse 下的给定应用程序中识别和启动特定模拟器?我有一个最近的 Eclipse/Java/ADT 设置,我正在使用 Mark Murphy、Meier 和 Abelson 提供的各种教程。
c - 访问数据链路层数据包
我想创建一个用于从数据链路层访问 IPv4 数据包的套接字。从unix网络编程V1开始,
1)我正在实现一个dhcp客户端,这是正确的方法吗?(意味着没有访问数据链路层,我无法收到来自 dhcp 服务器的回复)或者还有其他更简单的方法吗? 另外,由于此套接字将接收发往我系统的所有 IPv4 数据包,我应该如何区分 dhcp 回复数据包和其他数据包?
2)请给我一个好的链接/教程,用于数据链路层访问的网络编程。在上面的书中,没有详细描述。
这是我的代码
network-programming - 将 recvfrom() 与原始套接字一起使用:一般疑问
我创建了一个原始套接字,它从数据链路层获取所有 IPv4 数据包(删除了数据链路层标头)。并且为了阅读我使用的数据包recvfrom
。
我的疑问是:假设由于操作系统进行了一些调度,我的进程休眠了 1 秒。当它醒来时,它recvfrom
在这个原始套接字上做了(要接收的字节数说 1000)(目的是只接收一个IPv4 数据包并说这个数据包的大小是 380 字节)。并且假设在此期间许多网络应用程序也在同时运行,因此所有 IPv4 数据包必须已在此套接字的接收缓冲区中排队。所以现在recvfrom
将返回所有 1000 个字节(以及从第 381 个字节开始的其他 IPv4 数据包),因为它的缓冲区中有足够的数据可以返回。虽然我的程序只能理解一个 IPv4 数据包
那么如何预防这件事呢?我是否应该逐字节读取并解析每个字节,但效率很低。
c - 从内核模块内部发送原始以太网数据包
我发现我需要sk_buff
在内核模块中构建一个新结构并将其传递给我的网络设备,但我不知道如何为简单的原始以太网数据包设置结构变量。
这必须很容易,但如果有人能给我一个如何将它们sk_buff
组合在一起的示例代码,我将不胜感激。
c - c原始套接字和64位问题
我仍在努力让我的示例代码在 64 位机器上运行。由于缺少/过时的标题/库,我之前的问题得到了解决。
我编译此代码如下: gcc -Wall -g -o server server.c 和 gcc -Wall -g -o client client.c 我在 2 台 linux 机器(均为 32 位)上运行它们,它工作正常。当我在 64 位机器上重新编译这段代码时,似乎没有数据包从客户端传递到服务器。将 tcpdump 放在客户端上似乎它正在发送格式错误的标头,这些标头一直被拒绝。有人可以启发我吗?
------------------server.c----------------------
php - 如何在 PHP 中逐字节写入套接字?
如何在 PHP 中逐字节写入套接字?
例如,我该怎么做:
伪代码连接的数字实际上是 dec 中的字节。希望你能理解我。
tcp - tcp 校验和和 tcp 卸载
我正在使用原始套接字来创建自己的套接字。我需要设置 tcp_checksum。
我已经尝试了很多参考,但都没有工作(我正在使用wireshark进行测试)。
请问你能帮帮我吗。
顺便说一句,我在某处读到如果您设置 tcp_checksum=0。然后硬件会自动为您计算校验和。这是真的?我试过了,但在wireshark中,tcp_checksum给出的值为0X000并说tcp offload。我还阅读了有关 tcp 卸载的信息,但不明白,仅仅是wireshark 无法检查卸载的 tcp 校验和,但有一个正确的吗?
编辑:我意识到如果您将 tcpChecksum 设置为 0,那么网卡将设置它而不是操作系统。我正在使用wireshark和虚拟机进行测试,所以这解释了为什么校验和为0x000(因为数据包甚至没有传递到网卡。)
但我仍然对手动计算tcp_checksum感到好奇......任何帮助或链接?
.net - 使用异步 Socket.BeginReceive 时如何检测超时?
在 F# 中使用原始套接字编写异步 Ping,以启用使用尽可能少的线程的并行请求。不使用“System.Net.NetworkInformation.Ping”,因为它似乎为每个请求分配一个线程。我也对使用 F# 异步工作流感兴趣。
当目标主机不存在/响应时,下面的同步版本正确超时,但异步版本挂起。当主机响应时,两者都起作用。不确定这是 .NET 问题还是 F# 问题...
有任何想法吗?
(注意:该进程必须以管理员身份运行才能允许原始套接字访问)
这会引发超时:
但是,这挂起:
这是代码...
c - 我可以使用 tun/tap 和原始套接字制作“TCP 数据包修改器”吗?
我有一个与 TCP 通信的 Linux 应用程序,为了帮助进行分析和统计,我想修改它发出的一些 TCP 数据包中的数据。我宁愿在不破解 Linux TCP 堆栈的情况下做到这一点。
到目前为止,我的想法是制作一个充当“TCP 数据包修改器”的网桥。我的想法是通过桥一侧的 tun/tap 设备连接到应用程序,并通过桥另一侧的原始套接字连接到网卡。
我担心的是,当您打开原始套接字时,它仍然会将数据包发送到 Linux 的 TCP 堆栈,因此即使我愿意,我也无法修改它们并继续发送它们。这个对吗?
桥的伪 C 代码草图如下所示:
这看起来可能吗,还是有其他更好的方法可以实现相同的目标?(TCP 数据包桥接和修改。)