Articles of networking

将PCAP跟踪转换为NetFlow格式

我想将一些PCAP跟踪转换为Netflow格式,以便使用netflow工具进一步分析。 有没有办法做到这一点? 具体来说,我想使用“stream量导出”工具来从networkingstream量跟踪中提取一些感兴趣的领域,如下所示: $ flow-export -f2 -mUNIX_SECS,SYSUPTIME,DPKTS,DOCTETS < mynetflow.trace 在这种情况下,mynetflow.trace文件是通过使用以下命令转换PCAP文件获取的: $ nfcapd -p 12345 -l ./ $ softflowd -n localhost:12345 -r mytrace.pcap 这会生成一个networkingstream量跟踪,但是由于它的格式不正确,无法正确使用stream量导出。 我也尝试pipe道输出以下命令stream出口,如下所示: $ flow-import -V1 -z0 -f0 <mynetflow.trace | flow-export -f2 -mUNIX_SECS,SYSUPTIME,DPKTS,DOCTETS 但第一个命令的输出生成零时间戳。 有任何想法吗?

Docker的macvlannetworking,无法访问互联网

我有一个具有多个IP地址的专用服务器,一些IP具有关联的MAC地址,而另一些IP地址(在子网中)没有MAC地址。 我创build了docker macvlannetworking使用: docker network create -d macvlan -o macvlan_mode=bridge –subnet=188.40.76.0/26 –gateway=188.40.76.1 -o parent=eth0 macvlan_bridge 我有IP:88.99.102.115与MAC:00:50:56:00:60:42。 创build一个容器使用: docker run –name cont1 –net=macvlan_bridge –ip=88.99.102.115 –mac-address 00:50:56:00:60:42 -itd nginx 这工作,我可以从外部访问nginx在该ip地址托pipe。 与没有MAC地址的IP和网关不在子网的情况。 子网:88.99.114.16/28,网关:88.99.102.103 无法使用以下方式创buildnetworking docker network create -d macvlan -o macvlan_mode=bridge –subnet=88.99.114.16/28 –gateway=88.99.102.103 -o parent=eth0 mynetwork 引发错误: no matching subnet for gateway 88.99.102.103 尝试增加子网范围包括网关: docker network create -d […]

Linux套接字缓冲区如何溢出?

我有一个从Linux 64位平台(2.6.18)上的多播套接字读取的Java阅读器应用程序。 套接字大小已被设置为2 MB。 当阅读器读不到足够快时,套接字“溢出”,即数据包从缓冲器中丢弃。 我想知道的是Linux内核如何将数据包从套接字缓冲区中取出。 我假设套接字缓冲区本身是一个FIFO缓冲区。 但是,如果满了会发生什么? 下一个数据包是否会被丢弃(并且缓冲区内容不会改变)? 或者将新的数据包replace缓冲区中的旧数据包? 如果是的话,哪个数据包(最老的?,最年轻的?,一个随机select的数据包?)? 感谢您的任何见解。

如何使用套接字地址获取自己的IP地址?

我想获得我的程序启动的计算机的IP地址,然后将其发送到客户端,但我总是得到0.0.0.1,而不是真正的IP地址(例如127.0.0.1)。 我目前能够获得端口,但不是IP地址。 我怎么才能得到它? 最好的解决办法是能够用sockaddr_in来获得它。 这是我目前正在做的事情: int open_connection(char* ip, int* port) { int sock; struct sockaddr_in sin; socklen_t len; int i; i = 0; len = sizeof(sin); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) return (-1); bzero(&sin, sizeof(struct sockaddr_in)); sin.sin_family = AF_INET; if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) != 0) perror("Error on bind"); if […]

有没有办法阻止套接字发送(),直到我们得到该数据包的确认?

还是我必须在应用程序级别实现它?

read()在套接字编程中不被阻塞

我有一台服务器每隔5秒向客户端发送一次数据。 我希望客户端阻塞在read(),直到服务器发送一些数据,然后打印它。 我知道read()默认是阻塞的。 我的问题是,我的客户端没有阻止read()。 这很奇怪,这似乎不是一个正常的问题。 我的代码在无限循环中打印出“没有回来”。 我在一台linux机器上编程。 我的代码片段如下。 请指教。 while(1) { n = read(sockfd, recvline, MAXLINE); if ( n > 0) { recvline[n] = 0; if (fputs(recvline, stdout) == EOF) printf("fputs error"); } else if(n == 0) printf("Nothing came back"); else if (n < 0) printf("read error"); } return;

可以“连接”调用套接字返回成功,没有服务器调用“接受”?

服务器创build了一个套接字并绑定到一个端口,并启动了一个处于循环中的线程来接受连接。 稍后由于exception导致线程退出而退出循环,但套接字仍然限制到端口。 现在如果客户端连接到这个服务器,它就成功了。 这怎么可能? 如果我理解正确,只有在服务器在接收套接字上“接受”之后,“连接”才会返回。 我在这里错过了什么?

如何在Linux中“互连”两个套接字?

有两个连接的sockets。 我怎样才能互相连接? 在一个套接字上出现的数据应该被写入另一个。 EOF / FIN应该传播良好。 如果一方半封闭,另一方也应半封闭。 int client = get_connected_client_socket(); int proxy = get_connected_proxy_socket(); negotiate_with_proxy(代理); iterconnect(客户端,代理); //现在忘记了客户端和代理。 //系统应该处理IO /关机/closures。 //理想的是,甚至没有任何用户空间进程的支持。 Linux能做到吗? 可以通过欺骗连接跟踪来改变现有连接的跟踪状态吗? @相关确定我能写多less文件句柄; 将数据从一个FH复制到另一个

在一个套接字(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理技巧目前看起来是最好的方法,但仍然过多的样板 想法?