对于linux
c编程原始套接字,这是一个快速的问题。如果我只想使用原始套接字来监听任何接口,我是否真的必须绑定到ip地址或接口来监听流量?据我了解,我觉得我应该能够只调用sock();。然后启动recvfrom()流量。也许我错了,但是我看过一些不使用它的程序。
没错,您唯一需要做的就是打电话给socket()
then recvfrom()
。不过请注意,使用收听存在一些限制SOCK_RAW
。
如果您不是在“发送后忘记”的基础上使用原始套接字,那么您将有兴趣阅读原始数据包的回复数据包。数据包是否将被传递到原始套接字的决策逻辑可以这样放大:
- TCP和UDP数据包永远不会传递到原始套接字,它们始终由内核协议栈处理。
2.
ICMP数据包的副本将传递到匹配的原始套接字。对于某些ICMP类型(ICMP回显请求,ICMP时间戳请求,掩码请求),内核可能希望同时进行一些处理并生成答复。
所有IGMP数据包都传递到原始套接字:例如OSPF数据包。
指定给协议的所有其他未由内核子系统处理的数据包都传递到原始套接字。
您正在处理将答复数据包传递到原始套接字的协议这一事实并不一定意味着您将获得答复数据包。为此,您可能还需要考虑:
1.
通过socket(2)system调用创建套接字时,相应地设置协议。例如,如果您要发送ICMP回显请求数据包,并且想要接收ICMP回显应答,则可以将协议参数(第3个参数)设置为IPPROTO_ICMP)。
将socket(2)中的协议参数设置为0,以便接收到的数据包头中的任何协议号都将匹配。
为套接字定义一个本地地址(例如通过bind(2)),因此,如果目标地址与套接字的本地地址匹配,它也将被传递到您的应用程序。
有关更多详细信息,您可以阅读例如this。
我正在用C语言编写一个服务器,使用POSIX sockets api。 这是作为GUI应用程序的一部分运行的,它需要能够停止和启动服务器监听和向客户端发送数据。 服务器的主要部分基本上是这样的(我排除了很多代码,因为其中一些与这个问题无关。) 换句话说: 让套接字监听连接 为select()调用设置fds 使用stdin调用select(),所有连接客户端套接字,以及获取从GUI发送的任何数据的管
我正在使用Netty编写Java游戏服务器。我可以从本地主机成功连接客户端,但无法从远程PC连接。util中没有显示侦听套接字。我是不是遗漏了什么?
现在,我可以通过NAT建立连接,但只能使用连接套接字: 但现在,发送SYN数据包进行连接的两个套接字已经连接。 你会认为我会做的,通过两个NATs得到一个连接,万岁。
我正在尝试在nexus 5(Android 6)和谷歌眼镜之间建立连接。要连接的客户端代码: 服务器端代码: 以https://github.com/vicmns/BluetoothGlass为参照。我面临的问题是,在accept()返回后,连接立即断开,并出现以下错误: 02-15 16:20:42.769 2163-2414/?e/Bt _ btif _ sock _ RFCOMM:find
问题内容: 我有一个关于使用golang嗅探tcp数据包的问题。我们编写了一个小工具,可以捕获来自光纤分接头的所有传入TCP数据包。 当前的实现在Linux下使用libpcap包装器。我们需要将此工具移植到Windows。当然,目前尚不可能。 所以我的问题是,是否存在用于嗅探数据包的跨平台解决方案?我们只需要TCP数据包,IP标头,没有以太网数据,并且不需要libpcap的所有功能。 如果没有跨平
当我进行套接字编程时,我无法清楚地理解。 我的理解是 如果我使用此选项打开套接字,表示我可以在header之前创建自己的header,但最终数据以 /code>协议的格式发送。我的理解是正确的。如果错了,可以一些解释。 谢谢