Articles of networking

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地址。 谢谢。

谁能给我最新的netlink编程样本?

我正在用netlink编写一个Linux驱动程序来在用户空间和内核空间之间进行通信。 但是我找不到一些有用的资料,因为netlink已经从Linux kernel> = 2.6.24改变了。 谁可以给我一些关于如何创build一个netlink套接字的build议。 提前致谢!

Linux select()vs ppoll()vs pselect()

在我的应用程序中,有一个io-thread,专门用于 在自定义协议中包装从应用程序接收的数据 通过tcp / ip发送数据+自定义协议包 通过tcp / ip接收数据+自定义协议包 解包自定义协议并将数据交给应用程序。 应用程序通过不同的线程处理数据。 此外,这些要求规定未确认的窗口大小应该是1,即,在任何时候只应该有一个未确认的未确认消息。 这意味着,如果io线程已经通过套接字发送了一个消息,它将不会再发送任何消息,直到它听到来自接收方的一个消息。 应用程序的处理线程通过pipe道与io-thread通信。 应用程序需要正常closures,如果有人从Linux CLItypesctrl + C。 因此,鉴于这些要求,我有以下选项 在套接字和pipe道描述符上使用PPoll() 使用select() 使用PSelect() 我有以下问题 select()和poll()之间的决定。 我的应用程序只处理less于50个文件描述符。 是否可以假设我selectselect还是投票是没有区别的? select()和pselect()之间的决定。 我阅读了linux文档,它说明了信号和select()之间的竞争条件。 我没有经验的信号,所以有人可以更清楚地解释竞争条件和select()? 这是否与某人在CLI上按ctrl + C和应用程序不停止? pselect和ppoll()之间的决定? 任何想法在一个之间