Articles of networking

Linux:如何将整个数据包发送到另一台主机上的特定端口?

我已经使用libpcap捕获了一个TCP数据包,并且我想把这个整个数据包(不用修改它)发送到另一个主机上的另一个端口上的另一个嗅探器。 有什么办法可以做到这一点? 非常感谢!

在单独的TCP段中发送数据,而不被TCP堆栈合并

在Linux上(内核3.0.0.12; C ++与GCC 4.6.1)我想通过(POSIX)send-call发送几个TCP数据包。 使用Wireshark,我可以看到数据包不是在单独的TCP帧中发送的,而是两个或更多的数据包在一起发送。 有没有办法告诉系统从一个send()缓冲区发送数据到自己的TCP数据包中? 程序stream不应该阻塞在发送呼叫。

sendmsg()中的辅助数据如何工作?

sendmsg()允许发送辅助数据到另一个套接字,我想知道这是如何工作的。 1)辅助数据是否与正常消息一起打包? 2)如果是这样,一个远程接收套接字如何知道如何parsing这个? 3)远程接收客户端如何检索这些辅助数据? 谢谢。

以编程方式获取networking链接types和速度

我不知道是否有一个更紧凑的方法来find链接速度和Linux中的networking接口的types(无线,以太网),而不是打开并读取/sys/class/net/eth0/type和/sys/class/net/eth0/speed文件。 如果没有,谁能告诉我在哪里可以find/sys/class/net/eth0/type返回的数字,在哪种networkingtypes对应? 编辑:它变得更糟! 经过一些无线的实验, /sys/class/net/wlan0/type也返回1,而/sys/class/net/wlan0/speed不存在,我必须从/sys/class/net/wlan0/wireless/link有时会返回不正确的速度。 例如在54Mbits卡中有时会返回55。 提前致谢!

为什么getsockopt()不会返回TCP_MAXSEG的期望值?

我试图以编程方式configuration我的TCP连接的MSS在GNU / Linux系统,特别是Ubuntu 12.04,内核3.2.0-68-generic 根据男子7 tcp TCP_MAXSEG传出TCP数据包的最大段大小。 如果在连接build立之前设置了这个选项,它也会改变在初始数据包中通告给另一端的MSS值。大于(最终的)接口MTU的值不起作用。 技术合作计划还将对所提供的价值施加最小和最大限度的限制。 这让我想我可以在连接TCP套接字之前configuration该值。 我写了一小段代码来创build套接字,我使用setsockopt()来configurationMSS。 在我的testing中,我将这个mss设置为1000B。 代码调用setsockopt()后跟getsockopt()来仔细检查已正确configuration的值。 两个系统调用都返回0(没有错误)。 之后,我连接到远程主机通过tcpdumpvalidation使用的MSS是正确的。 在这里我看到: getsockopt()返回的MSS值始终为536字节 tcpdump显示syn包中configuration的MSS 修改我的代码以在连接套接字后configurationMSS。 getsockopt()返回的MSS值是1448 Bye 有没有解释这种行为的正确方法? 几个注意事项: 根据维基百科536 B = MaxIPDatagramSize – IPHeaderSize – TcpHeaderSize这是为了避免IP数据包碎片。 创build一个套接字并连接它(没有setsockopt()调用),显示由getsockopt()返回的536 B的mss,但tcpdump在SYN数据包中显示一个1460 B的公告,这是有道理的1500 – IpHeader – TcpHeader 下面,如果你有兴趣,是我的代码: int setSocketMss( int i_sd, int i_mss ) { int res = 0; int mss = i_mss; […]

如何在Haskell中指定本地绑定接口来组播套接字?

我已经尝试了Network.Multicast包,但它确实工作,但是,我找不到指定本地绑定接口(“bond0”或“bond1”等)到组播套接字的方法。 我知道在CI需要使用ioctl将债券转换为结构sockaddr_in,然后将此结构提供给IPPROTO_IP系列的setsockopt IP_MULTICAST_IF选项,但我不知道如何在Haskell中做到这一点。 有人能帮忙吗? 谢谢!

发送固定长度的TCP帧

我需要使用TCP在固定的非标准MTU(例如1560)的子网上发送一些数据。 如果帧的长度小于MTU,则通过该子网传输的所有以太网帧都应手动填充0。 所以,数据大小应该是(1560 – sizeof(IP头) – sizeof(TCP头))。 这是我要这样做的方式: 我设置了TCP_CORK选项来减less数据的分段。 这是不可靠的,因为有200毫秒的天花板,但它的工作原理。 我知道IP头的大小(20字节),所以数据长度应该等于(1540 – sizeof(TCP头))。 那就是问题所在。 我不知道TCP头的大小。 它的“选项”字段的大小是浮动的。 所以,问题是:如何获得TCP头的大小? 或者也许有一些方法发送TCP帧与固定长度的头?

如何在linux内核中添加一个新的自定义第4层协议(一个新的原始套接字)?

我想在linux(ubuntu 14.04)中添加自己定制的第4层协议–IPPROTO_MYPROTO作为可加载的内核模块。 我已经完成了所有必要的步骤来注册协议。 在这里,我分享我的代码。 当我试图从sendmsg()发送用户空间程序的消息时,我期望通过struct proto结构注册的相应的fn myproto_sendmsg()应该在内核空间中调用。 但是我正在观察的是,虽然内核空间中的myproto_sendmsg()没有被调用,但是目标机器正在接收正确的数据。 惊喜! 惊喜! 。 是默认的udp sendmsg()fn在这里踢,就像是不速之客做他的工作。 在这里,用户空间中的sendmsg()调用返回与发送一样多的字节。 因此,FN返回成功。 用户空间程序: void forwardUDP( int destination_node ,char sendString[] ) { struct msghdr msg; destination_node = destination_node % N; //destination node to which data is to be forwaded int sock, rc; struct sockaddr_in server_addr; struct iovec iov; struct hostent *host; //hostent predefined […]

可以在Unix域套接字上使用SO_REUSEPORT吗?

Linux内核> = 3.9允许在内核负载平衡的进程之间通过设置SO_REUSEPORT共享套接字: http : //lwn.net/Articles/542629/ 这怎么可以用于AF_UNIXtypes的套接字? 看来,它只适用于TCP,而不是Unix域套接字。 这是一个Pythontesting程序: import os import socket if not hasattr(socket, 'SO_REUSEPORT'): socket.SO_REUSEPORT = 15 if True: # using TCP sockets # works. test with: "echo data | nc localhost 8888" s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) s.bind(('', 8888)) else: # using Unix domain sockets # does NOT work. […]

无法使用Linux上的NetworkInterface.getNetworkInterfaces获取所有networking接口

我需要打印我的机器的所有mac地址。 推荐的方法是使用NetworkInterface.getNetworkInterfaces()并遍历返回的枚举。 但是,当一些设备closures(没有IPconfiguration),那么上述方法将不会返回接口。 运行“ip addr”将返回以下内容 lo:mtu 16436 qdisc noqueue link / loopback 00:00:00:00:00 brd 00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 :: 1/128 scope host valid_lft永远forever_lft永远 G2:mtu 1500 qdisc pfifo_fast qlen 1000 link / ether 00:03:b2:75:99:c2 brd ff:ff:ff:ff:ff:ff G1:mtu 1500 qdisc pfifo_fast qlen 1000 link / ether 00:03:b2:75:99:c3 brd ff:ff:ff:ff:ff:ff inet 10.205.191.123/16 brd 10.205.255.255 scope […]