问题标签 [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 投票
3 回答
20570 浏览

c# - 在 C# 中使用原始套接字

我想用 C# 编写一个端口扫描器,但我不能使用 SocketType.Raw,因为原始套接字是从桌面版本的 Windows 中取出的。我不能使用 SharpPcap 或 Winpcap 的其他包装器,因为我使用 PPPoE 进行互联网连接,而 Winpcap 不支持 PPP 设备。

我需要使用一个实现原始套接字并且不依赖于 winpcap 的库。

有任何想法吗?基本上我需要发送 SYN,接收 SYN/ACK 或 RST 但不要发回 ACK。

编辑:

对于不相信 RAW 套接字从桌面版本的 Windows 中消失的人,请参阅此处:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms740548 (v=vs.85).aspx

在 Windows 7、Windows Vista、带有 Service Pack 2 (SP2) 的 Windows XP 和带有 Service Pack 3 (SP3) 的 Windows XP 上,通过原始套接字发送流量的能力受到以下几种方式的限制:

  • TCP 数据不能通过原始套接字发送。
  • 无法通过原始套接字发送具有无效源地址的 UDP 数据报。任何传出 UDP 数据报的 IP 源地址必须存在于网络接口上,否则数据报将被丢弃。进行此更改是为了限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送欺骗数据包(具有伪造源 IP 地址的 TCP/IP 数据包)的能力。
  • 不允许使用协议bind的原始套接字调用函数。注意带有原始套接字 的函数允许用于其他协议(例如、或)。IPPROTO_TCP
    bindIPPROTO_IPIPPROTO_UDPIPPROTO_SCTP
0 投票
2 回答
2988 浏览

c - 在linux中使用PF_PACKET错误设置IP_HDRINCL

我使用以下设置了一个原始数据包套接字:

然后我尝试IP_HDRINCL使用以下方法设置套接字选项:

但我无法设置此选项(我收到errno92 错误和消息“协议不可用”。如果我更改PF_PACKET为,PF_INET那么选项已设置但我必须使用PF_PACKET。那么有没有办法使用套接字设置此选项在上面创建?

谢谢一堆。

0 投票
3 回答
3144 浏览

c - 如何从linux上c中的icmp回复中提取mac地址

我试图在发送原始数据包后找出交换环境中机器的mac地址。我正在尝试实现 traceroute 命令。我想知道当我收到 ICMP 超时消息时如何提取该机器的 mac 地址。我是网络编程的新手,所以很困惑什么套接字调用将帮助我提取 mac 地址。

谢谢 。

0 投票
2 回答
6195 浏览

libpcap - libpcap 是否在它们下面使用原始套接字?

我对使用原始套接字和 libcap 感到有些困惑。可以,任何人都可以简单地指出使用两者的优点。我读了几个链接,但是,它让我感到困惑。

0 投票
1 回答
3045 浏览

c - 使用 struct ip 和 struct iphdr 取消引用指向不完整类型的指针

你好,我正在尝试解析一些数据包,当使用 struct ip 时,我得到:“取消引用指向不完整类型的指针”错误消息。所以我尝试了 struct iphdr 但仍然有同样的问题这是我用来解析数据包的函数:

我知道程序中还有其他错误,但想在寻找其他问题之前解决这个问题。谢谢你

0 投票
1 回答
3199 浏览

sockets - 拜托,任何人都可以帮助用 C/C++ 编写服务器-客户端原始套接字程序

我是原始套接字的新手。我想编写一个服务器和一个客户端应用程序,它们使用原始套接字在一个或多个文件中发送和接收原始数据。每个文件可能包含一个或多个 50 字节的数据段,每个数据段带有指定的分隔符(即空格、回车等)。我的服务器的工作是从文件中读取并一次发送每个段。每个数据包应仅包含没有任何传统标头信息的数据,例如 MAC 地址等以太网标头(数据包可能在数据包前面包含某种形式的数据,以指示数据包的长度和/或开始以及分隔符指示数据包的结束)。客户端应用程序应该简单地监听端口、解析数据并将原始数据写入文件。

请指导我。我发现了许多原始套接字程序,但没有一个是清楚的。如果有人能给我一个坚实的开始,那就太好了。

0 投票
1 回答
763 浏览

linux - iperf 工具可以用来测量原始套接字的吞吐量吗?

我正在使用使用原始套接字的客户端服务器应用程序,我可以使用 iperf 测量它们之间的吞吐量吗?

0 投票
2 回答
3295 浏览

python - python icmp 原始套接字实现

我对python比较陌生,所以请体谅...

我正在通过 raw_sockets 实现服务器和客户端。我有必要的特权。

现在,我这样定义的服务器

Q1)为什么我不能简单地输入:hosts = 'localhost'。如果我这样做,它不允许我写这行:sockSer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)。然后服务器没有收到我客户的消息。只有当做 gethostbyname(socket.gethostname()) 我得到 192.168.1.101 然后它工作。

在不同的类中:客户端套接字:

Q2)我还需要输入:sockCli.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 还是 sockCli.connect(address)?似乎它在没有连接命令的情况下工作。对于客户端套接字?

现在,当我执行以下操作时出现问题:1)从客户端向服务器发送数据包:

2)在服务器中接收数据包并将某些内容发送回客户端:

现在,我的重要问题是: Q3)服务器仅向客户端发送了 1 个数据包,有效负载为“b”。发生的情况是,我的客户端实际上在 while 循环中接收到 2 个数据包:第一个数据包是客户端自己发送到服务器的数据包,另一个数据包是客户端从服务器获得的数据包。因此我的输出是 'ab' 而不是简单的 'b' 为什么会发生这种情况???

注意:我没有输入整个代码,但我认为我的语法、解析、标题组合等是正确的。我的代码中有明显的问题吗?如有必要,我将上传整个代码。

谢谢

0 投票
4 回答
19726 浏览

c - C 编程 TCP 校验和

几天来,我一直无法为 TCP 校验和。我查看了 Internet 上的许多资源,但我所看到的示例都没有向您展示如何进行 TCP 校验和。我还查看了RFC文档,但仍然遇到问题:

下面是我用来生成校验和的代码:

此函数适用于 IP 校验和。

以下是我为 TCP 标头制作的结构:

我一直在使用 Wireshark 来测试这些数据包,唯一错误的是校验和。

最后,这里是我使用 TCP 标头和来自 IP 标头的信息加载的伪标头结构:

一旦我用正确的信息加载了这个结构,我就在整个伪标头结构上使用校验和函数,并将 TCP 校验和分配给该值。你觉得我提供的有什么问题吗?如果问题不在这里,那可能是我看不到的粗心错误。

0 投票
3 回答
1003 浏览

c# - 调用 Socket.Receive 时防止线程休眠

我正在开发一个通过套接字接收 tcp 数据的低延迟金融应用程序。
这就是我建立套接字连接和接收字节的方式:

我听说当你调用Receive()一个 Stream 套接字时,调用线程被置于睡眠状态,并在接收到数据时被唤醒。我希望线程全速运行(使用 CPU 容量)。

有没有办法可以使用 Stream 套接字来做到这一点?如果唯一的方法是使用原始套接字,你能提供一个例子吗?