Articles of networking

如何以编程方式在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头文件不包括代码使用的常量和结构。

我如何在Linux上用C语言获得我的IP地址?

我怎么能得到我的IP地址(最好是192.168.0.1格式)?

如何使用sendmsg()通过两个进程之间的套接字发送文件描述符?

在@cnicutar回答了这个问题之后 ,我尝试从父进程发送一个文件描述符给它的subprocess。 基于这个例子 ,我写了这个代码: int socket_fd ,accepted_socket_fd, on = 1; int server_sd, worker_sd, pair_sd[2]; struct sockaddr_in client_address; struct sockaddr_in server_address; /* ======================================================================= * Setup the network socket. * ======================================================================= */ if((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket()"); exit(EXIT_FAILURE); } if((setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on))) < 0) { perror("setsockopt()"); exit(EXIT_FAILURE); } server_address.sin_family […]

Socket recv()挂在MSG_WAITALL的大消息上

我有一个应用程序从服务器读取大型文件,并经常挂在特定的机器上。 它已经在RHEL5.2下成功运行了很长一段时间。 我们最近升级到RHEL6.1,现在它定期挂起。 我已经创build了一个重现问题的testing应用程序。 它挂起100次约98次。 #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/param.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <netdb.h> #include <sys/socket.h> #include <sys/time.h> int mFD = 0; void open_socket() { struct addrinfo hints, *res; memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; hints.ai_family = AF_INET; if (getaddrinfo("localhost", "60000", &hints, &res) != 0) { […]

Python:在linux中获取本地接口/ IP地址的默认网关

在Linux上,如何使用pythonfind本地ip地址/接口的默认网关? 我看到了“如何获得内部IP,外部IP和默认网关的UPnP”的问题,但接受的解决scheme只显示如何获得Windows上的networking接口的本地IP地址。 谢谢。