问题标签 [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.
c - 用 C 编写一个基本的 traceroute 脚本
我必须编写一个 trceroute 脚本,但我不确定我的尝试是否正确。
现在我正在这样做(如果我做错或笨拙,请纠正我):
- 得到了 ip- 和 udpheader 的结构
- 校验和函数
- 打开 2 个套接字:一个用于以 SOCK_RAW 模式发送 UDP 数据包(用于操作 ttl),一个用于从路由器接收 ICMP 应答。
- 使用 sendto() 发送 UDP 数据包
- 不知道如何接收和处理 ICMP 答案
有没有比使用 sock_raw 我必须自己定义所有标题内容更舒适的方法来更改 TTL?打开 ICMP sock 时我应该为 socket() 使用哪些参数?如何接收 ICMP 答复?
c - Send an UDP packet and receive an ICMP response from router in C
I'm trying write a C program that sends an UDP packet to a given IP adress and waits for an ICMP response of a router telling that the time to live expired. It's kept very simple because I just want to understand the mechanism at first. What I need is someone checking my code giving feedback on what's wrong and what's missing. I'm very unexperienced at C-programming but I have to do it as an assignment - giving my best to understand it...
I keep receiving "Could not process recvmsg()." and I have no clue anymore what else to try. I'd like to receive an ICMP answer and read its senders IP-Address.
Looking forward to helpfull hints.
Best regards!
networking - ICMP 标头校验和是否也包含数据?
作为家庭作业的一部分,我必须在 Linux 中编写一个 C 程序,该程序使用原始套接字生成对 ICMP Echo 请求的 ICMP 回复。ICMP 数据包中的数据是否也必须包含在校验和中?或者我应该只计算标题的校验和?
c - 如何将原始套接字绑定到特定端口?
我目前正在做一个编程任务。任务是实现客户端、网络仿真器和服务器。客户端将数据包传递给网络模拟器,而网络模拟器则传递给服务器。反之亦然。分配的先决条件是我只能使用原始套接字。因此,我将创建自己的 IP 和 UDP 标头。我已经用wireshark测试了我的数据包。它们都是正确的并且格式正确(它可以正确读取它们)。
另一个要求是模拟器、客户端和服务器都必须绑定特定的端口。现在,我不明白如何将原始套接字绑定到特定端口。我所有的原始套接字都在它们绑定的主机地址上接收所有流量。根据手册页和 Internet 上的其他任何地方,包括 Richard Stevens 的“Unix Network Programming”,它们应该是这样工作的。我的老师没有回复我的任何电子邮件,我可能要到周二才能问他。我看到了两个选项。首先,我可以使用 libpcap 从特定设备进行过滤,然后输出到我的原始套接字。我觉得这超出了我们的任务范围。或者我可以在从套接字接收到它们后过滤它们。这显然有很多开销,因为所有数据包都通过内核复制/移动。至少,这是我的理解(如果我错了,请随时纠正我)。
所以我的问题是:他们是一个选项还是我可以为此设置的东西?原始套接字将在哪里绑定到端口?我错过了什么明显的东西吗?
感谢您的时间。
--
python - How to read complete IP frames from TCP socket in Python?
I need to read a complete (raw) IP frame from a TCP stream socket using Python. Essentially I want an unmodified frame just as if it came off the physical line, including all the header information.
I have been looking into raw sockets in Python but I have ran into some issues. I don't need to form my own packets, I simply need to read and forward them verbatim.
So, how can I read an entire IP frame (incl. header) from an existing TCP socket (in Python)?
Preferably I'd like to use only standard libraries. Also, I am on a Linux host.
Thanks!
linux-kernel - 原始套接字帮助:为什么内核 UDP 不接收原始套接字创建的 UDP 数据包?
我正在研究原始套接字。我使用 IP_HDRINCL 选项来构建我自己的 IP 标头。在 IP 标头之后,我正在构建一个 UDP 标头。然后我将数据包发送到我系统的环回地址。我正在运行另一个程序,它将在 UDP 数据包到来时捕获它们。为了检查数据包是否正确形成和接收,我运行了另一个正在读取原始 IP 数据报的进程。我的问题是,虽然第二个进程(读取原始数据报)运行良好(所有 IP 和 UDP 字段似乎都正常),但第一个进程(接收 UDP)没有收到我创建的任何数据包。IP 标头中的协议字段没问题,端口也匹配...我使用的是 Linux 2.6.35-22。我想知道这在新内核中是否正常?请检查下面的代码是否有任何错误。
c++ - TCP 连接劫持
我有一个我一直在使用 C++ 进行的小项目,由于它的性质,我需要将数据包插入到实时 TCP 流中。(目的很单纯,http ://ee.forumify.com/viewtopic.php?id=3299,如果你必须知道的话)我正在为游戏创建一个关卡编辑器,由于握手的性质,我不能简单地与 WinSock 等高级库建立新连接。到目前为止,它一直依靠 Winsock Packet Editor 来做这些脏活,但如果我让应用程序来处理这一切,它会让每个人都开心。
所以我的问题是:是否有一个 API 可以让我控制实时 TCP 流,最好是在它完成后保持有效的 API?而且我宁愿不必注入任何 DLL。此外,Detours 是一个禁忌,因为我使用的是 GCC/Mingw。
我玩过 WinPCap 并且我有一些工作代码(我可以收集一个数据包,并从中生成一个适当的数据包以发送)但由于它在如此低的级别上运行,我无法预料到所有潜在的协议最终用户可能会使用。是的,他们很可能会使用基于以太网的 IPv4,但是那些仍然使用 PPP 或其他一些晦涩的协议的人呢?此外,在我的连接完成后,客户端应用程序会断开连接,因为数据包中的最新 ID 值已更改并且客户端假定它已断开连接。
所以,如果有人能提供一个高级的 TCP 流操纵器,我会很高兴的。如果没有,我会继续修补 WinPCap 并告诉所有拨号用户去获得更好的互联网。
目标平台:Microsoft Windows XP 至 Windows 7
c++ - Socket传输数据但收不到响应
我正在尝试在 C++ 中实现 UpNP,我在 google 上找到了一些资源,但没有一个有效。我发现这个工作(http://www.codeproject.com/KB/IP/upnplib.aspx)但它适用于.NET,所以我决定嗅探网络以查看代码在做什么,然后做同样的事情插座。
以下是结果(全尺寸:http: //i.stack.imgur.com/eLoHK.jpg):
这表明我的数据包看起来不错,一切似乎都一样,除了源地址之外的一切,我不知道如何控制(我的代码和finder.net.exe都在测试在连接到同一网络的同一台计算机上)。
这是我的代码:
我删除了所有 WSAGetLastError() 错误检查以使代码更易于阅读,一切正常,直到 recvfrom 总是返回 -1 并且 strerror(WSAGetLastError()) 打印“未知错误”。
我希望有人能引导我朝着正确的方向前进,我最近两天一直在努力完成这项工作。
windows-ce - 如何在 WinCE5 中使用原始套接字?
我需要在 Windows CE 5.0 中使用原始套接字。以下代码总是失败并出现错误
socket failed, err:10044
.
(此地址族中不存在对指定套接字类型的支持。)
在 Windows CE 中使用原始套接字我必须做什么?
c - 在较旧的原始套接字教程中使用 ntop() 而不是 ntoa()
我正在按照此链接上的教程创建原始套接字数据包嗅探器:
http://www.security-freak.net/raw-sockets/sniffer_eth_ip.c
该代码使用 ntoa() 函数来获取源/目标 IP 地址的点表示法版本,但据我了解,该函数已被弃用,因此这些行会导致问题。
在我的系统(Ubuntu 11.04)上,我只能在 arpa/inet.h 中找到 inet_ntoa() 函数,但本教程甚至没有使用该标题。当我包含 arpa/inet.h 时,我得到了这个编译错误:
所以我知道我需要使用 struct in_addr 但我不熟悉这种类型'__be32'。有人可以帮忙吗?
编辑- 实际上让这个工作做一些相当复杂的铸造,但有更好的方法吗?