Articles of networking

零拷贝机制和libpcap

是否有可能使用零拷贝数据包机制在Linux上使用libpcap读取数据包? (我正在使用CentOS 6.2)如果是,我可以看到任何代码的例子吗?

我如何使用select()来监视一个对象?

在这里 ,它说select()用于“监视多个文件描述符,等待一个或多个文件描述符为某类I / O操作(例如,可能的input)”准备好“。 然后,我看了Beej的socket编程指南 ,他们使用select()来监视套接字文件描述符。 简而言之,教程和手册页说select()操作文件描述符 。 不过,我碰到一段使用select()来监视对象的代码 。 码: class SomeObject { public: static SomeObject *_pInstance; //…some other methods… } SomeObject *SomeObject::_pInstance = new SomeObject(); SomeObject &refObj = *SomeObject::_pInstance; fd_set fdAllSet, fdReadableSet; int nReadyHandles = 0; FD_SET( refObj, &fdAllsSet ); //<—this line while (1) { fdReadableSet = fdAllSet; nReadyHandles = select( maxFd+1, &fdReadableSet, […]

Tshark – 不能显示自定义协议的数据

我有一个自定义协议运行在端口8888(不,它不是HTTP),并在TCP之上。 我已经捕获到PCAP文件的数据包的stream量。 问题是,现在我不能只显示它的数据部分。 我试着用下面的命令: tshark -r test.pcap -R 'tcp.port==8888 && tcp.len>0' -T fields -e "tcp.data" 但它显示一个空的string。 tcp.data字段不是保存TCP数据包的那个字段吗? 如何只显示我需要的数据?

如何在Ubuntu上使用berkeley包filter(BPF)

我做了search,但没有find任何BPF代码在我的电脑上使用,也没有任何示例代码使用。 我的目标是find低级别的函数来过滤数据包。 我正在用C语言编写程序。 我使用3.2.0内核的Ubuntu 12.04。

如何避免特定情况下的繁忙循环

我有一个问题,我不知道如何解决。 我有一个多路复用多个连接的程序。 这些连接正在同时接收stream式数据。 我必须configuration非阻塞套接字,因为这些stream具有不同的比特率。 现在我真正做的是将这些套接字保持在一个数组中循环遍历它们,并使用select检测是否有数据要读取,如果不是,则继续到数组中的下一个元素。 除了CPU总是100%的事实之外,它工作得很好。 实际上,如果在某个时候没有任何东西从任何套接字读取,它仍然会循环。 我真的不知道如何在任何套接字上没有数据的情况下阻塞循环,只要有数据就继续下去。 我认为这可能是解决scheme,但我真的不知道我怎么能做到这一点。 该程序必须非常灵活,因为它是一个UDPstreamlogging器,如果阻塞时间太长,这会导致文件滞后。 我非常感谢你。 PS:只是为了信息,我仍然在学习,所以请不要责怪我,即使解决scheme可能是明显的。 编辑: 这里有一些伪代码: 当录制请求进入时,我创build一个新的连接并连接到stream地址。 如果成功,我使用以下函数构build我的fdset: build_fdset() { int ii; /* */ FD_ZERO(&fdset); /* */ for (ii = 0; ii < max; ii++) { if (astRecorder[ii].bUsed != FALSE && astRecorder[ii].socket != INVALID_SOCKET) { FD_SET(astRecorder[ii].socket,&fdset); /* */ if (astRecorder[ii].socket > maxSocket) maxSocket = astRecorder[ii].socket; } } […]

linux发送带有标志MSG_DONTWAIT的调用

在阻塞套接字上,如果我在每个调用的基础上设置标志MSG_DONTWAIT ,它是否会影响整个套接字,因为套接字现在的行为就像一个非阻塞的套接字,因为这个调用是使用这个标志进行的? 我的意思是将recv在阻塞套接字开始行为像一个非阻塞recv ? 或者这个标志的效果只会持续请求的单一发送呼叫?

如何使用select()来等待以太网接口状态更改?

我的程序必须检测以太网接口何时转为RUNNING状态。 我可以通过使用ioctl()来轮询运行标志: if( ioctl( dummy_fd, SIOCGIFFLAGS, &ifr ) != -1 ) return ifr.ifr_flags & IFF_RUNNING; 但是没有轮询就立即要求信息。 目前该程序使用select()来等待其他事件。 所以使用select()来检测接口的状态变化是很好的。 有一种方法可以select ,我从网上读过。 但我不再find该页面。

将原始IP数据写入接口(linux)

我有一个包含二进制forms的原始IP数据包的文件。 该文件中的数据包含完整的IP标头,TCP \ UDP标头和数据。 我想使用任何语言(最好是Python)来读取这个文件,并将数据转储到该行。 在Linux中,我知道你可以直接写一些设备(echo“DATA”> / dev / device_handle)。 如果使用python在/ dev / eth1上执行打开,可以达到同样的效果(即,我可以回显“DATA”> / dev / eth1)

将dhcp客户端标识符存储在服务器中,以便在稍后的租用期间使用

我想将客户端标识符存储在服务器中,以便稍后尝试将IP地址租赁给其他客户端时,服务器可以引用该值。 每个客户端发出一个标识符,如果另一个客户端显示相同的标识符,我分配主机名称基于该标识符。 (只有2个不同的标识符是可能的,所以我只需要存储两个标识符)。 这是我添加到服务器来存储这个。 #space to store the identifiers option space local code width 2 length width 2; option local.identifier1 code 1 = unsigned integer 8; option local.identifier2 code 2 = unsigned integer 8; #Custom option identifier sent by the client option identifier code 189 = unsigned integer 8; option switch code 190 = unsigned […]

TCP RST段向套接字点对点发送多less个情况?

我知道,当一个进程崩溃时,现有的TCP套接字将被放弃,通过发送RST包(段)到其他对端,相关的套接字fd在其他对端将收到RST包。 还有其他情况下RST数据包发出? 例如,如果一个进程在套接字fd上调用close(),但在该套接字上留下未读数据,它是否也会通过该套接字fd将RST数据包(段)发送给其他节点?