Articles of networking

绑定在客户端代码连接之前

我有多个以太网I / F。 eth0,eth1,eth2 …我想连接到外部服务器,例如1.2.3.4:80。 我的连接是好的,但在某些特殊情况下,我想连接为eth1而不是eth0。 服务器的代码检查我的接口的IP地址。 我认为我需要绑定之前连接。 没有绑定(2)服务器总是从eth0获取数据包 我正在查找演示此行为的代码。 有人有一个例子的链接?

如何彻底销毁C中的套接字连接

我使用套接字在linux中创build了一个聊天客户端,并且我希望完全破坏这个连接。 以下是代码的相关部分: int sock, connected, bytes_recieved , true = 1, pid; char send_data [1024] , recv_data[1024]; struct sockaddr_in server_addr,client_addr; int sin_size; label: if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket"); exit(1); } if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1) { perror("Setsockopt"); exit(1); } server_addr.sin_family = AF_INET; server_addr.sin_port = htons(3128); server_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(server_addr.sin_zero),8); if (bind(sock, (struct […]

如何捕获内核模块中的networking帧

我想在某些网卡接收到帧的时候捕获帧; 从中提取一些信息(目前我需要捕获源MAC和源IP地址); 将这些信息保存在一些公共数据结构中; 并让框架上升到TCP / IP协议栈。 我以前使用Netfilter,但显然它不提供链接层挂钩。 有什么办法可以做到这一点? 我正在把它写成一个内核模块。 运行Linux内核2.6.32

AF_UNIX套接字开销?

我看到有一对AF_UNIX套接字通过调用创build一对奇怪的东西,例如: socketpair(AF_UNIX, SOCK_STREAM, 0, sfd); 其中sfd是文件描述符的int [2]数组。 首先,默认缓冲区大小似乎是122K(124928字节),而不是来自/ proc / sys / net的任何内容(例如设置为128K的wmem_default)。 有谁知道这个奇怪的缓冲区大小的原因? 其次,通过套接字(8字节)写小信息。 在写块之前我只能写423个字节,只有8 * 423 = 3384个字节,还有一个奇怪的大小。 这些消息就好像它们每个都占用了295+个小字节。 这种开销的来源是什么? 在RHEL6上运行(2.6.32,64位) 我编写了一个程序来尝试不同大小的数据来比较开销成本: #include <errno.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define DATA_SIZE 4 void run(size_t size) { int sfd[2]; if (socketpair(AF_UNIX, SOCK_STREAM, 0, sfd) == […]

在linux内核中增加一个新的networking协议

我知道在linux内核中,我们可以在传输层添加自己的协议,类似于TCP,UDP等。 是否有任何钩子在networking层注册一个新的协议,类似于IP,ARP,它可以将数据包传输到应用程序,以及如何将这个协议添加到Linux内核?

与SOCK_RAW套接字的TCP握手

好吧,我意识到这种情况有点不寻常,但我需要build立一个TCP连接(三次握手),只使用原始套接字(在C中,在Linux中) – 即我需要自己构造IP头和TCP头。 我写了一个服务器(所以我必须首先响应传入的SYN数据包),无论出于什么原因,我似乎无法做到正确。 是的,我意识到一个SOCK_STREAM将为我处理这个问题,但由于我不想进入的原因不是一个选项。 我在网上find的关于使用原始套接字的教程都描述了如何构build一个SYN flooder,但是这实际上比build立TCP连接要容易一些,因为您不必根据原始数据包构build响应。 我已经得到了SYN flooder的例子工作,我可以从原始套接字读取传入的SYN包,但我仍然无法创build一个有效的SYN / ACK响应来自客户端的传入SYN。 那么,有没有人知道使用原始套接字,不仅仅是创build一个SYN flooder,或者是否有人可以做到这一点(使用SOCK_RAW,而不是SOCK_STREAM)的代码? 我会很感激。 MarkR是绝对正确的 – 问题在于内核正在发送重置数据包以响应初始数据包,因为它认为端口已closures。 内核正在殴打我的响应和连接死亡。 我正在使用tcpdump来监视连接 – 我应该更加细心,并且注意到有两个回复,其中一个是重新设置,以及我的程序创build的响应。 D'OH! 似乎最好的解决scheme是使用MarkRbuild议的iptables规则来阻止出站数据包。 但是,如build议的那样,使用标记选项有一个更简单的方法。 我只是匹配是否重置TCP标志设置。 在正常连接的过程中,这不太可能是需要的,如果我阻塞所有正在使用的端口的出站重置数据包,对我的应用程序来说并不重要。 这有效地阻止了内核的不需要的响应,但不是我自己的数据包。 如果我的程序监听的端口是9999,那么iptables规则如下所示: iptables -t filter -I OUTPUT -p tcp –sport 9999 –tcp-flags RST RST -j DROP

发送iPhone HTTP请求到Apache PHPnetworking服务器

我是一个游戏和3Dgraphics背景的程序员,现在我想刷新我的networking和Web开发技能。 我有一个任务,我想完成这样做。 我的想法是,我想能够发送一个HTTP请求或类似的东西,我的networking服务器,运行基于LAMP的设置。 我想知道我怎么可以发送一个HTTP请求,包含从我的iPhone使用Cocoa Touch框架的一些信息到我的networking服务器。 我希望Web服务器(使用PHP)能够将发送的信息logging到纯文本文件中,以后我可以使用它来生成图表。 对于我的例子,我们可以发送当前的date。 我认为人们必须经常这样做,我真的想知道如何做到这一点。 谢谢你的帮助。 PS如果你不知道Cocoa代码来发送请求,没关系,我确定我可以弄清楚,但我想至less知道如何让Linux服务器保存HTTP请求,最好是PHP,但另一种适当的语言是好的。 奖金标志为了安全地做到这一点。 另外:我是一个总noob在这个,需要源代码,欢呼声:D

树莓派ad-hocnetworking

我想尝试一些与Raspberry Pis的networking项目,我只需要在一对pis之间发送数据包。 作为第一步,我将很高兴能够在ad-hoc模式之间ping到Raspberry Pis。 尽pipe在线查看了几个教程和示例,但我还没有成功完成此任务。 我已经安装了Debian Wheezy操作系统的2个Raspberry Pis。 我正在使用以下USB适配器,我在两个pis上都安装了固件,并通过以pipe理模式将它们连接到路由器来testing它们是否工作:总线001设备004:ID 050d:945a Belkin组件F7D1101 v1基本无线适配器[Realtek RTL8188SU] 以下是关于networking信息的一些打印输出: / etc / network / interfaces在每个pi上: pi1@raspberrypi ~ $ cat /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 iface wlan0 inet manual address 192.168.2.1 netmask 255.255.255.0 wireless-channel 4 wireless-essid pi-ad-hoc wireless-mode ad-hoc pi2@raspberrypi ~ $ cat […]

如何以编程方式在Linux中查找为特定networking设备configuration的IP地址/networking掩码/网关?

我想写一段代码来检查每个networking设备(如eth0,lo,master设备)的一些关于该设备的统计数据和configuration数据。 我可以在/ sys / class / net / …中find统计数据(和大部分configuration数据),但是我找不到任何C / C ++ API或procfs / sysfs中列出inet addr的条目,networking掩码和网关。 我检查了一些替代品: parsing从ifconfig /路由/一些其他实用程序的输出:我不想每次我需要做检查启动一个subprocess。 parsing/ etc / sysconfig / network-scripts /:只会给我启动configuration,而不是当前状态。 而且,由于这个代码是针对我工作场所的产品的,因此每个外部库都要经过彻底的检查(这意味着我将永远需要添加任何外部库),我更喜欢依靠Linux本地API而不是外部库的解决scheme。 谢谢!

如何在Linux中创build虚拟以太网设备?

我正在testing使用以太网(而非IP)在两台计算机之间进行协商的协议的实现。 为了实际上不必有两台物理计算机,我想创build两个虚拟以太网接口。 这些只能相互交谈,所以一个端点程序将绑定到一个接口,另一个端点将绑定到另一个端点。 这是可能的,我该怎么做?