- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我最近一直在研究网络与 c 代码和密码学,在思考随机问题时,我偶然发现了一段用于数据包嗅探的代码,我对函数 中使用的实际套接字有疑问从()接收()
。套接字通过以下 sock 函数 rawSock = socket(AF_INET, SOCK_RAW, 0)
进行初始化。
我理解 SOCK_STREAM
和 SOCK_RAW
是表示整数的宏;但问题不在于值(value)观,而在于结果。
我什么时候可以使用 SOCK_STREAM
而不是 SOCK_RAW
,反之亦然?
我了解使用 SOCK_STREAM
的基本客户端和服务器通信。我正在使用 C 和 Linux
最佳答案
阅读man page .
原型(prototype)
int socket(int domain, int type, int protocol);
类型可以是
SOCK_STREAM Provides sequenced, reliable, two-way, connection-
based byte streams. An out-of-band data transmission
mechanism may be supported.
或
SOCK_RAW Provides raw network protocol access.
在一行中,SOCK_STREAM
用于面向连接的套接字,其中底层操作系统创建和管理 L4 (TCP)、L3 和 L2 的 header 。 OTOH SOCK_RAW
提供了对 header 和数据包构造的更细粒度的控制,用户必须在其中构造和提供 header ,还可以管理内容。
详细说明:
Sockets of type SOCK_STREAM are full-duplex byte streams. They do not preserve record boundaries. A stream socket must be in a connected state before any data may be sent or received on it. A connection to another socket is created with a connect(2) call. Once connected, data may be transferred using read(2) and write(2) calls or some variant of the send(2) and recv(2) calls. When a session has been completed a close(2) may be performed. Out-of-band data may also be transmitted as described in send(2) and received as described in recv(2).
和
SOCK_RAW sockets allow sending of datagrams to correspondents named in sendto(2) calls. Datagrams are generally received with recvfrom(2), which returns the next datagram along with the address of its sender.
关于c - Linux SOCK_RAW 和 SOCK_STREAM 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50888934/
我有一个简单的套接字客户端和服务器程序,它不能在互联网上工作 # Echo server program import socket import ImageGrab HOST = ''
我正在学习 Python 中的套接字并想出了 variable = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 我明白了这个socket.soc
我已经从 PHP 手册中阅读了这两种通信类型的定义,但实际上我在理解某些段落时遇到了问题,所以我需要你的帮助。 这些拖曳定义适用于 PHP 手册: SOCK_STREAM 提供有序、可靠、全双工、基于
我在通过 sock_stream 连接发送字符串(一次一个字符)时遇到问题。原因是我试图一次发送多个字符串,这些字符串接近 70000 个字符。看来我尝试使用的写入函数需要一个字符串。 for(i=0
我正在使用套接字进行网络编程。当服务器未启动时,我的客户端程序尝试重复连接到服务器时出现问题(项目的特殊要求)。 问题是这样的: 服务器未启动:客户端等待 3 秒,然后发出另一个 connect()
我正在从 C 程序写入 SOCK_STREAM正在从 go 程序监听的 Unix 域套接字,使用 net.Listen("unix", sockname) .当我将套接字设置为 O_NONBLOCK使
我刚刚遇到一个奇怪的事情,我看到应用程序默认情况下它们使用 SOCK_STREAM 函数。为什么会这样?这 SOCK_STREAM 只是创建多个流吗?或者它是可用于创建 TCP 流的标准 SOCK_S
我刚刚开始更好地了解套接字编程,我正在尝试构建一个可以发送和接收消息的简单程序。我遇到了将套接字绑定(bind)到地址以使用它的问题。这是我的- #include "stdafx.h" using n
我需要在 Linux 上用 C 编写一个小型客户端/服务器应用程序。 由于我是网络编程的新手,所以我构建了一个简短的示例以便进行更多探索。 我基本上是在尝试发送一个由客户端动态分配的 double 数
我目前正在 linux 上编写一个服务器 http,它应该服务于 GET 和 POST 查询。我的问题是: - 我应该什么时候关闭与某个客户端的连接?发送响应后立即?还是我应该等待套接字以获取另一个查
我正在做一个项目,允许用户通过代理重定向他的浏览。系统是这样工作的——用户在远程 PC 上运行这个代理,然后也在他的笔记本电脑上运行代理。然后,用户将其在笔记本电脑上的浏览器设置更改为使用 local
我正在使用 https://elixir.bootlin.com/linux/v4.9.137/source/samples/bpf/sockex3_kern.c在这个例子中,我使用的不是 RAW 套
我最近一直在研究网络与 c 代码和密码学,在思考随机问题时,我偶然发现了一段用于数据包嗅探的代码,我对函数 中使用的实际套接字有疑问从()接收()。套接字通过以下 sock 函数 rawSock =
我有一个小型应用程序,它使用 Unix 域套接字与客户端通信数据。套接字的类型是 SOCK_STREAM,并且设置为阻塞模式(默认)。当客户端很懒并且无法处理我写入套接字的数据时,我在特定情况下遇到了
我有两个简单的进程在两台不同的 linux 机器上运行,一个客户端和一个服务器,它们使用 AF_INET|SOCK_STREAM 套接字相互通信,客户端向服务器发送一个简短的命令字符串,然后服务器响应
大家好,我有个问题,我似乎找不到关于在多播上发送原始数据包的文档,所有示例、解决方案和文档都以 UDP 用法为中心。 我以此为例:http://svn.python.org/projects/stac
据我所知,如果 unix 套接字创建为 SOCK_STREAMS 类型,则它是单向的,如果 SOCK_DGRAM 则它是双向的。 我正在考虑使用 node-ipc用于通过 unix 套接字的 IPC。
据我了解,SOCK_DGRAM 和 SOCK_STREAM 对应于使用 INET 地址系列完成的无连接和面向连接的网络通信。 现在我正在尝试学习 AF_UNIX 套接字以在同一主机上运行的进程之间执行
我有一个小型客户端服务器应用程序,我希望在其中使用 C 而不是 C++ 通过 TCP 套接字发送整个结构。假设结构如下: struct something{ int a; char b[64]
我试图在 visual studio c++ 上创建一个套接字应用程序,但我做不到。 问题是 int listen_sock = socket(PF_INET,SOCK_STREAM,0) 返回 -1
我是一名优秀的程序员,十分优秀!