Articles of networking

在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两个虚拟以太网接口。 这些只能相互交谈,所以一个端点程序将绑定到一个接口,另一个端点将绑定到另一个端点。 这是可能的,我该怎么做?

Linux API来确定进程拥有的套接字

有没有一个Linux库,可以让我知道哪些IP套接字为哪些进程所拥有? 我想我正在寻找lsof -i的编程等价物。 最终,我想将通过libpcap看到的数据包关联到进程。 更新:有几个人build议使用/proc/<pid>/net/tcp和udp ,但在我的系统上,每个进程都显示相同的数据,所以这没有帮助。

C插件系统:dlopen失败

作为C插件系统:符号查找错误的延续,我仍在编写我的插件系统,并遇到新的错误。 为了概括一下插件是什么,程序由一个由shell接口的networking应用程序组成,消息有一个types,因此可以用来在networking上创build应用程序。 例如,一个可能的应用程序将是一个聊天或转移应用程序。 因此,shell命令可以在networking上发送特定应用程序的消息,当收到消息时,如果它对应于特定的应用程序,则以消息内容为参数执行动作函数,它可以是应用程序。 一个插件是一个具有init函数的共享库,用来注册它的命令和动作。 一个命令可能只是一个简单的命令,不会与networking交互,这就是为什么我现在成功的原因。 插件系统包含模块: plugin_system.c list.c被第一个模块用来存储插件 networking部分包括: protocol.c协议的主要部分 message.c消息处理的主要部分 application.c主要部分用于编写应用程序 具有ccommonfunction的common.c文件 network.c有用的networkingfunction protocole中的模块都是相互依赖的,我为了方便而分割文件。 所有模块都使用-fPIC选项进行编译。 编译一个名为plug.c的插件, 至less不会与networking交互,我使用: gcc -Wall -O2 -std=gnu99 -D DEBUG -g -fPIC -c -o plug.o plug.c gcc -Wall -O2 -std=gnu99 -D DEBUG -g -o plug.so plug.o plugin_system.o list.o -shared 它完美的工作,库加载与dlopen没有问题,初始化函数与dlsym加载和正确执行,所以插件注册,然后我执行命令,我可以看到它的工作。 现在我不想为插件添加networking通信支持,所以我修改了我使用的只有命令打印消息的相同testing插件。 我有一个调用sendappmessage_all一个函数,通过networking发送消息给每个人,在message.c中定义。 我可以在不添加networking模块对象的情况下编译新的插件,它编译时,插件会正确加载,但是当它调用sendappmessage_all显然会失败 symbol lookup error: ./plugins/zyva.so: undefined symbol: sendappmessage_all […]

我怎样才能检查在Python的networking接口上的数据传输?

有一种用于获取给定networking接口的IP的套接字方法: import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) 其中返回以下内容: >>> get_ip_address('lo') '127.0.0.1' >>> get_ip_address('eth0') '38.113.228.130' 有没有类似的方法来返回该接口的networking传输? 我知道我可以读取/proc/net/dev但我喜欢套接字方法。

我需要使用路由套接字安装什么软件包?

我正在尝试由Richard Stevens在Unix Network Programming中给出的代码。 但我无法获得编译的代码。 这里是源代码。 http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-f00/unpv12e/libroute/ 我没有头文件net / if_dl.h和net / route.h头文件不包括代码使用的常量和结构。