Articles of 联网

套接字编程gfortran

我希望能够在我的Fortran应用程序中调用networkingfunction。 我的老板希望我在Fortran中做所有的事情,而不是使用C和Fortran。 我们已经在Windows上使用PGI的Fortran编译器完成了一个应用程序的版本。 我们正在把它移到Linux,我们可能会使用它们的编译器。 现在,我正在使用gfortran。 我为这些networking调用创build了一个接口,并且编译和链接。 下面的代码与我正在做的类似,除了接口和常量在模块中。 PROGRAM MAIN INTEGER,PARAMETER ::AF_INET = 2 INTEGER,PARAMETER ::SOCK_STREAM = 1 INTEGER,PARAMETER ::IPPROTO_TCP = 6 INTERFACE FUNCTION socket(domain,type,protocol) INTEGER ::socket,domain,type,protocol END FUNCTION END INTERFACE sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP) WRTIE(*,*)"Socket returned: ",sock END PROGRAM 当我运行该程序时,套接字函数无法返回-1。 我真的不知道发生了什么事。 我不在命令行中添加任何库,所以我猜想它正确地链接到默认库。 我编译使用 gfortran -o MAIN_PROGRAM MAIN_PROGRAM.f90 -fno-underscoring

如何使用xterm.js创build基于web的terminal来SSH系统在本地networking上

我遇到了这个令人敬畏的库xterm.js ,这也是Visual Studio Code的terminal的基础。 我有一个非常普遍的问题。 我想通过一个基于web的terminal(这是networking外,可能是在aws服务器上)访问本地networking上的一台机器(ssh到一台机器)。 我可以成功地在本地networking上做到这一点,但我无法从互联网 – >本地networking得出结论。 举个例子 – An aws server running the application on ip 54.123.11.98 which has a GUI with a button to open terminal. I want to open terminal of a local machine which is in a local network somewhere behind some public ip on local ip 192.168.1.7. An […]

在weblogic 11g中设置优先的监听地址

我有一个WebLogic 11g域与1个pipe理员服务器和4个托pipe服务器在两台机器上运行。 每台机器有3个IP地址,但是其他机器只能看到其中一个地址。 每台机器都运行一个节点pipe理器,似乎彼此和pipe理服务器之间的通信良好。 虽然托pipe服务器在第二台机器上启动,但它不能与pipe理服务器通信,因为它使用错误的IP地址。 看来,当weblogic启动时,它映射到所有的IP地址,但select错误的第一个,即默认。 这就是为什么托pipe服务器从节点pipe理器收到错误信息的原因。 有没有办法在weblogic 11g中设置优先的监听地址,但仍然允许它监听所有其他地址? weblogic如何获取IP地址列表? 它们的顺序是否依赖于操作系统?

在不使用环回networking的情况下将数据包转发到同一台主机上

我有这个libnetfilter_queue应用程序接收来自内核的一些iptables规则的数据包。 在直接回答我的问题之前,我给了一个示例代码和其他工具来设置一个testing环境,以便我们的问题定义和可能的解决scheme可以更加准确和强大。 以下代码描述了应用程序的核心function: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <netinet/in.h> #include <linux/types.h> #include <linux/netfilter.h> /* for NF_ACCEPT */ #include <errno.h> #include <libnetfilter_queue/libnetfilter_queue.h> #define PREROUTING 0 #define POSTROUTING 4 #define OUTPUT 3 /* returns packet id */ static u_int32_t print_pkt (struct nfq_data *tb) { int id = 0; struct nfqnl_msg_packet_hdr *ph; struct nfqnl_msg_packet_hw *hwph; u_int32_t […]

在接受连接之前或之后分叉?

以下代码片段创build了4个进程,全部共享相同的侦听套接字。 这样做有没有危险? 我应该一直有一个听取过程和叉后连接被接受,传统的方式? for (p = 0; p < 3; p++) { pid = fork(); if (pid == 0) break; } while (1) { unsigned int clientlen = sizeof(echoclient); /* Wait for client connection */ if ((clientsock = accept(serversock, (struct sockaddr *) &echoclient, &clientlen)) < 0) { die("Failed to accept client connection"); } fprintf(stdout, "Process […]

如何通过不同的接口路由TCP / IP响应?

我有两台机器,每台都有两个有效的networking接口,一个以太网接口eth0和一个tun / tap接口gr0 。 目标是使用接口gr0在机器A上启动一个TCP连接,然后让机器B的响应(ACK等)通过以太网接口eth0 。 因此,机器A在gr0上发送一个SYN,机器B在它自己的gr0上收到SYN,然后通过eth0发送它的SYN / ACK。 tun / tap设备是一个GNU Radio无线链路,我们只是希望通过以太网来响应。 什么是最简单的方法来完成这个? 我需要对TCP / IP进行更多的研究,但是我最初认为,伪造传出数据包的源代码会告诉接收者响应欺骗地址(应该被路由到eth0 )。 这将涉及通过gr0从tun / tap接口路由IP,并将其他通信保留到eth0 。 我们正在使用Linux和Python解决scheme将是可取的。 感谢您的期待!

如何重现一个默默丢弃的TCP / IP连接?

我有一种情况,一个Java程序build立一个长期运行的TCP / IP连接到一个服务器,并且所说的连接的function与文档完全一样,除了在我的控制之外的环境中的一件事。 每个星期六,服务器都重新启动,但由于某种原因,这不能正确传达给我的客户端,所以连接只是挂起来等待响应。 这与使用过时的JDBC连接看到的行为完全相同,在服务器和客户端之间的某个路由器发现连接处于空闲状态并在没有通知的情况下将其删除。 我需要能够重现这种情况能够创build一个适当的修复。 因此,我需要知道是否有一个很好的方法来模拟路由器在我的控制下默默地放下连接? 我可以在我的开发环境和服务器之间放置一个Linux机器或Mac。 我可以在虚拟机(vmware播放器)中运行JVM,如果我可以在那里下载的话。 build议是非常受欢迎的。 编辑2012-12-18:为我工作的解决scheme是使用本地的基于Java的SOCKS5代理,可以用Ctrl-Z任意暂停,并告诉我的应用程序通过它。

ngrok如何在防火墙后面工作?

Ngrok( https://ngrok.com/ )应该允许您通过转发将本地端口和服务展示给万维网。 但是,如果我打开我的本地机器上的端口80,如下所示: ngrok 80 我回来了: Tunnel Status online Version 1.3/1.3 Forwarding http://3a4bfceb.ngrok.com -> 127.0.0.1:80 Forwarding https://3a4bfceb.ngrok.com -> 127.0.0.1:80 Web Interface http://127.0.0.1:4040 # Conn 0 Avg Conn Time 0.00ms 据我所知,任何对http://3a4bfceb.ngrok.com的请求都将通过端口80发送到本地计算机,但如果我坐在阻止传入通信的NAT /防火墙之后(这是一种非常常见的情况)。 ngrok是否会启动轮询请求以确定何时收到数据?

启用TCP_NODELAY的Linux环回性能

我最近偶然发现了一个有趣的TCP性能问题,同时运行了一些比较networking性能和环回性能的性能testing。 在我的情况下,networking性能超过了环回性能(1Gignetworking,相同的子网)。 在这种情况下,我处理延迟是至关重要的,所以TCP_NODELAY已启用。 我们提出的最好理论是TCP拥塞控制正在维持数据包。 我们做了一些数据包分析,可以肯定的看到数据包正在被占用,但是原因并不明显。 现在的问题… 1)在什么情况下,以及为什么通过回送进行通信比通过networking慢? 2)尽可能快地发送时,为什么切换TCP_NODELAY对环回的最大吞吐量有比networking更多的影响? 3)如何检测和分析TCP拥塞控制作为对性能差的一个潜在的解释? 4)有没有人有这个现象的理由? 如果是的话,任何方法来certificate这个理论? 这里是一些简单的点到点的c + +应用程序生成的示例数据: 传输消息大小(字节)TCP NoDelay发送缓冲区(字节)发送方主机接收方主机吞吐量(字节/秒)消息速率(msgs / sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128closures16777216 HostA HostB 118072006 922437 TCP 128在4096 HostA HostB 11097417 86698 TCP 128closures4096 HostA主机B 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128closures16777216 HostA HostA […]

有多less线程创build和什么时候?

我有一个networkingLinux应用程序接收来自多个目的地的RTPstream,做非常简单的数据包修改,然后转发stream到最终的目的地。 如何决定我应该有多less线程来处理数据? 我想,我不能打开每个RTPstream的线程,因为可能有成千上万。 我应该考虑CPU内核的数量吗? 还有什么事呢? 谢谢。