Articles of networking

沙盒公开访问GCC

我想添加一个function到一个基于Linux的Web服务,允许不可信用户上传源代码到一个小的C ++程序,并将该代码自动保存到服务器上的文件,并用gcc编译,然后执行,捕获标准输出。 (这是一个与ideone.com,或者spoj.pl,或者topcoder.com,或者codechef.com或者许多其他网站完全不同的function。) 我的问题是: Q1。 我如何沙箱的可执行文件,以防止恶意用户试图破坏文件系统或访问networking等? Q2。 是否有一个公平/准确的方法来将系统资源加速处理,如处理器时间和内存使用情况?

父和子代之间的文件描述符共享

在Unixnetworking编程中,有一个Pre-forked服务器的例子,它使用Unix域pipe道上的消息传递来指示subprocess处理一个传入的连接: for ( ; ; ) { rset = masterset; if (navail <= 0) FD_CLR(listenfd, &rset); /* turn off if no available children */ nsel = Select(maxfd + 1, &rset, NULL, NULL, NULL); /* 4check for new connections */ if (FD_ISSET(listenfd, &rset)) { clilen = addrlen; connfd = Accept(listenfd, cliaddr, &clilen); for (i = 0; […]

如何使我的Docker容器通过第二个接口与另一个节点通信?

我正在努力执行一个可悲的testing,其中涉及到sandbox01networking中的服务器与在“Docker Host”服务器中运行的Docker容器之间的通信(该计算机与sandbox01networking中的其他节点位于同一个子网中。即在10. *地址/范围内有一个名为ens34的接口,在9 *networking上还有一个eth0接口,允许它访问外部世界:下载软件包,docker图像等等。 )。 无论如何,这里有一个图来说明我有什么: 问题:无法在sandbox01子网(10. *networking)中的节点和容器之间进行通信。 例如,someserver.sandbox01→mydocker2:ens34 :: docker0 :: vethXXX→容器只有当我停止iptables,这使得事情真的很神秘! 只是想知道如果你面临任何类似的问题..任何想法将不胜感激。 谜题:经过多次testing,确认容器不能与10. *networking中的任何其他节点进行通信 – 它的行为不如预期:它应该通过其网关docker0(172.17 .0.1),并通过docker主机中的路由表find与“someserver.sandbox01”(10.1.21.59)进行通信的path。 它只在我们让它在iptables中处理MASQUARADE时才起作用。 但是,Docker会自动添加这个规则: -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -c 0 0 -j MASQUERADE -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -c 0 0 -j MASQUERADE **请注意那里的“!-o docker0”,所以Docker不希望我们掩盖发送请求的IP地址? 不知何故,这是在搞乱沟通 容器响应任何通过IP 9的通信。*(eth0) – 即,我可以从我的笔记本电脑发送请求 – 但从来没有通过10. *(ens34)。 […]

TrafficStats特定应用程序特定的networking接口

我知道我可以使用下面的trafficstats API的方法来获取任何给定的应用程序的所有networking接口的字节发送和接收。 但是,我如何才能获得移动设备的统计信息? 这样我就可以分离手机和wifi数据。 getUidTxBytes(int uid) 获取此UID通过networking发送的字节数。 getUidRxBytes(int uid) 获取通过networking接收的这个UID的字节数。 看起来像这样的东西从API中缺less。 和其他方式getUidMobileRxBytes(int uid)

主机做不必要的DNS查找本地主机

我有一个centOS系统(embedded和非常二进制文件)与下面的/ etc / hosts。 $cat /etc/hosts 127.0.0.1 localhost localhost 此外,主机被分配一个DNS服务器,返回一些无效的IP用于localhost的域名查找。 但是由于一些networking的限制,我无法避免与这个DNS的连接。 我的问题是,当我已经有一个有效的/ etc / hosts文件为什么系统查询本地 DNS的DNS? 我怎么能阻止呢? 任何帮助将不胜感激。

unix / linux套接字中的阻塞模式是如何工作的?

阻塞模式是否将该特定任务置于“进程等待”状态,因为我认为非阻塞套接字需要来自用户的“忙等待”或“自旋locking”实现。 或者阻塞模式套接字只是内核的繁忙等待的隐式实现。 在信号量/互斥/监视器之类的locking机制中,通常通过将任务推入阻塞状态来实现locking。 我认为,如果这样的事情是可能的locking,然后套接字locking也可能以同样的方式实现。 我不知道,我认为轮询不是一个有效的方法,尤其是内核,因为内核总是有他的双手充满了这么多的任务。 谢谢。

如何将一个原始的L2数据包作为传入数据包注入到Linux上的接口?

我需要在Linux中将某些L2数据包(定制的)作为传入数据包注入特定接口,以testing运行在其上的一些应用程序。 有什么库(python首选)/例子,可以帮助吗? 我正在浏览Scrapy库,但看起来它只能将数据包作为传出数据包注入networking?

链接的docker集装箱之间的通信

我有两个docker集装箱在主机上的以下设置: 容器1 – UDP端口5043映射到主机端口5043(0.0.0.0:5043:5043) 容器2 – 需要以UDP方式将数据发送到端口5043上的容器1。 情况1 我启动Container 1并获取它的IP地址。 我使用这个IP地址并configurationContainer 2并启动它。 容器2能够通过调用udp://Container_1_IP:5043发送UDP数据到容器1 一切工作! 情景2 我通过将5043 UDP端口映射到主机的5043端口( 0.0.0.0:5043:5043 )来启动Container 1 我使用“ – 链接”链接容器2和容器1。 现在,当Container 2调用URL udp://Container_1_IP:5043 ,会出现错误“ Connection refused ”。 我确实能够使用IP从容器2内部ping容器1。 任何帮助,以获得scheme2为我工作将非常感激!

用很多系统呼叫等待分析networking软件/分析软件

我正在研究一个复杂的networking软件,我无法确定如何提高系统性能。 特别是在使用阻塞同步调用的软件的一部分中。 由于这部分系统正在进行繁重的计算,所以几乎不可能确定这个组件的慢度是由这些计算引起还是等待系统的其他部分。 是否有轻量级的分析器可以捕获这些信息? 我不能使用像valgrind这样的重型轮廓,因为这样会完全扭曲结果(虽然valgrind会是完美的,因为它捕获了所有必需的信息)。 我试图使用oProfile,但我只是无法得到任何有意义的结果(也许如果有一个简明的教程的地方…)。

UDP服务器给分段错误

我用UDP写了下面的echo服务器,但是我不知道为什么在sendto函数中给我分段错误,它收到很好,但是发送数据返回给客户端有问题。 我一直试图find几个小时的问题,但没有得到任何地方。 请有人指出错误,或者我可能做错了什么。 谢谢 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #define true 1 #define false 0 int main(int argc,char **args){ int BUF_LENGTH=101; int port_no=1800; struct sockaddr_in serv_addr,rmt_addr; //rmt_addr=malloc(sizeof(struct sockaddr_in)); char *buffer=malloc(BUF_LENGTH); int byte_recv=0; int rmt_length=0; int sock_id; sock_id=socket(AF_INET,SOCK_DGRAM,0); if(sock_id<0){ printf("Error creating socket : %d",sock_id); return […]