Articles of networking

在一个套接字(Linux,C)上订阅多个多播组

是否可以从一个套接字上的多个多播组接收数据? 例如: void AddGroup(int sock, const char* mc_addr_str, int mc_port, const char* interface) { struct sockaddr_in mc_addr; memset(&mc_addr, 0, sizeof(mc_addr)); mc_addr.sin_family = AF_INET; mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str); mc_addr.sin_port = htons(mc_port); if ((bind(sock, (struct sockaddr *) &mc_addr, sizeof(mc_addr))) < 0) { perror("bind() failed"); exit(1); } // construct an IGMP join request structure struct ip_mreq mc_req; mc_req.imr_multiaddr.s_addr = […]

用非IO事件中断epoll_wait,没有信号

当前的情况是epoll_wait在几个fds和一个可能的传入消息队列,我想epoll_wait下面的循环执行IO事件或新消息。 我知道的方法: 使用time毫秒超时,并在循环中检查队列的第一件事 消息可用时,使用队列代码中的自我pipe道技巧 用标准信号中断系统调用 使用epoll_pwait并细化前一点 上面提到的要点都不足以满足我的要求,我想知道是否还有其他的方法,我没有find。 原因是: 信号是multithreading代码要避免的,并不是很可靠 超时可以消除epoll的一部分好处,只能用事件唤醒 自我pipe理技巧目前看起来是最好的方法,但仍然过多的样板 想法?

为什么在Linux内核中没有零拷贝联网?

我想知道为什么Linux内核(或任何其他主stream操作系统)没有零拷贝networkingfunction的原因? 通过零拷贝我的意思是说,一个数据包/数据stream不会被复制传递给用户空间中的应用程序,但是例如使用内存池types的分配器来共享内核和用户空间之间的内存。 我自己提出了三个理论: a)我想有安全问题。 但是,当用户空间和内核被用作缓冲区时,真的没有办法使得内存在用户空间和内核之间共享? b)我想有稳定的顾虑。 但是,我们不能假设谁使用零拷贝networking,例如需要实例化并传递一个用于内核调用的内存池,是否知道内存pipe理? 意识到足以避免泄漏? c)目前为止还没有完成/需要。 我无法真正想象没有人要求这个function,因为每个使用小包的人通常都会受到“慢”TCP协议栈实施的阻碍,并且有第三方工具提供了0复制networking以供特殊用途使用网卡。 随意张贴任何猜测,但请标记你是否承担或有更深层次的理由保持StackOverflow质量:-)

绑定地址和Mysql服务器

我试图configurationmysql服务器时遇到绑定地址。 我想要configuration绑定地址的细节在下面的链接中。 多个主机名和多个权限? 现在,我想了解绑定地址的用途。 在这个意义上,是一个绑定地址我们分配给主机的MySQL服务器的地址? 我没有任何线索。 如果有人能解释我的目的,那真的会有帮助吗? 并将0.0.0.0绑定地址分配创build任何安全漏洞/循环孔?

如何在Java上支持IPv4和IPv6

我们的一个Java程序启动时,它只能监听IPv6(8080) 例如 # netstat -ntpl Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN – tcp6 0 0 :::8080 :::* LISTEN – tcp6 0 0 :::22 :::* LISTEN – 问题是不能从外部访问(localhost除外),解决这个问题,我有这个手动添加 -Djava.net.preferIPv4Stack=true 但是这使得这个程序只能用于IPv4networking。 是否有可能像上面的sshd一样,都支持IPv4和IPv6?

使用C中的Linux中的Raw套接字进行数据包嗅探

我需要在Linux中编写一个数据包嗅探器来检测发送的HTTPS数据包,并保存请求中的url。 我发现这个安全怪胎的代码,并运行它。 这个代码运行,只能嗅探收到的数据包,但我需要在嗅探器中获取发送的数据包。 如何在这个代码中获取发送的数据包? 我不能使用像libcap(禁止)的任何库。 代码是: sniffer.c

如何获得Linux中使用C的开放套接字列表?

有没有办法在Linux中使用用户空间或内核中的C获得所有打开的套接字(套接字地址或套接字描述符)列表? 谢谢

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

我有多个以太网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