Articles of networking

Scapy无法捕获RADIUS响应

我试图使用Scapy发送一个简单的RADIUS访问请求到我的RADIUS服务器,但Scapy无法捕获响应。 我用tcpdump和Scapy sniff来validation访问接受实际上是由客户端接收的。 这是我的设置: 数据包:( AVP是一个定制的图层) <IP frag=0 proto=udp dst=10.200.202.19 |<UDP sport=10999 dport=radius |<Radius code=Access-Request authenticator='W\xe8\xe1\x81FD\xdalR,\x9e8?\x8e\xda&' |<AVP type=User-Name data='testing' |<AVP type=User-Password data=',\xea\x84p\x8b\x8e\x8bo\x1c\xa5P\x9cR\xea\xb5M' |<AVP type=NAS-IP-Address data='127.0.1.1' |<AVP type=NAS-Port data='0' |>>>>>>> 客户端的2个terminal: 1号航站楼 usesr:~$ sudo tcpdump -i eth0 'udp and port 1812' tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, […]

ETH_P_IP没有按预期工作,我只能接收传入的数据包

我正在尝试使用Packet套接字来获取传入和传出的IP数据包。 当我创build套接字时,我已经指定了ETH_P_IP参数, socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP) 但是对于ETH_P_IP ,我只能看到incoming数据包,而不是传出的数据包。 如果我使用ETH_P_ALL ,我可以看到他们。 那么,什么是“正确”的标志使用?

如何在Linux中模拟套接字连接超时?

在MacOS中,我习惯使用以下解决scheme: import socket import time server = socket.socket() server.bind(('127.0.0.1', 7777)) time.sleep(5) server.listen(1) 如果另一个套接字试图连接到这个地址,它将被挂起直到server调用listen 。 但是在Linux中并不是这种情况,试图在listen呼叫立即Connection Refused之前进行Connection Refused 。 那么有没有更好的方法来模拟testing时的连接超时?

使用PACKET_MMAP有没有好处? (Linux)的

我为什么应该尝试使用多包发送PACKET_MMAP方法而苦苦挣扎。 我每20ms获得一个大约3千万字节的数据块,我将通过10gbps接口发送。 我需要处理一个数据包中的所有数据,这样数据就会进入caching,然后我只是以“正常”的方式发送数据(sendto)。 在这种情况下,转移到内核将从caching,这样一个内存传输。 由于我需要使用PACKET_MMAP来处理数据包中的所有数据,因此也会将数据从用户空间移动到用户空间,然后是来自用户空间的DMA。 那么PACKET_MMAP会带给我什么? 我的猜测是,它不会因为这两个方法将数据移动一次,甚至在(sendto)的情况下它看起来像两次,因为数据将驻留在caching中,它将有效地只有一次.. 我错了吗? 谢谢你的帮助。 /安德斯。

使用R从基于Web的PDF中刮取信息

我正在尝试从以下基于Web的PDF中刮取文本信息: http : //www.cmegroup.com/delivery_reports/IssuesAndStopsReport.pdf 任何build议如何做到这一点? 我已经探索了没有太多运气的tm包(不认识path): > pdf.loader <- readPDF(control= list(text = "-layout")) > rr <- pdf.loader(elem=list(uri="http://www.cmegroup.com/delivery_reports/IssuesAndStopsReport.pdf"),language="en",id="id1") Error: Cannot handle URI 'http://www.cmegroup.com/delivery_reports/IssuesAndStopsReport.pdf'. Error: Cannot handle URI 'http://www.cmegroup.com/delivery_reports/IssuesAndStopsReport.pdf'. Warning messages: 1: In normalizePath(file) : path[1]="http://www.cmegroup.com/delivery_reports/IssuesAndStopsReport.pdf": No such file or directory 2: running command ''pdftotext' -layout 'http://www.cmegroup.com/delivery_reports/IssuesAndStopsReport.pdf' -' had status 1 我也尝试在readPDF()input不同的“引擎”参数,但没有运气。

在linux上使用以太网原始套接字上的PACKET_QDISC_BYPASS选项的示例代码

根据http://man7.org/linux/man-pages/man7/packet.7.html ,自linux 3.14以来有一个新的选项PACKET_QDISC_BYPASS。 这有可能更快地发送和接收数据包。 看到一个示例代码: https : //github.com/netoptimizer/network-testing/blob/master/src/raw_packet_send.c ,但不幸的是它没有发送数据包的代码。 我添加了一些代码来发送数据包,但是sendto有问题。 # ./raw_packet_send p6p1 64 Lame RAW/PF_PACKET socket TX test program Enabled kernel qdisc bypass error sendto : Invalid argument 不知道为什么。 这里是代码(原始raw_packet_send.c与我愚蠢的代码)。 请让我知道如何使它工作或指向我一些很好的简单的示例代码。 谢谢。 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <stdlib.h> #include <unistd.h> #include <linux/if_packet.h> #include <errno.h> #include <sys/ioctl.h> #include <net/if.h> #include <netinet/in.h> //#include <stdio.h> […]

以编程方式更改Chromebook连接设置

我想以编程方式更改ChromeBook连接设置(configurationWiFi连接选项,如协议等)。 随处看,我可以得到一个API(Java或任何其他高级语言将是伟大的)来做到这一点。 有谁知道这样的API?

从用户空间访问sk_buff

我正在使用一个开关。 数据包通过一个特殊的千兆位端口进入内核,每个数据包前面有一个标题,告诉你数据包最初进入的是什么交换机端口。 我正在研究一个协议,要求我知道端口以响应数据包 – 您可以想象电源分配,OAM,802.1X等都有这个问题。 我将交换机端口号存储在sk_buff中的一个新字段中。 没问题。 但是,在用户空间中,我使用recvfrom接收数据包,并且无法访问sk_buff。 我可以访问sll_ifindex,所以我可以告诉哪个接口(甚至是VLAN),数据包进来(比如说eth0.2),但是由于所有的数据包都进入了特殊的千兆位端口,这并不是我所需要的。 我需要原来的端口。 有没有办法从sockaddr回溯到sk_buff? 由于数据包正在被复制,所以我无法访问前面的字节。 至less现在我还没有使用skbuff。 我可以拿出一些片状的东西,比如保持这个信息的一个单独的队列,并通过一个单独的通道或其他东西进行通信,但这似乎有问题。 想法?

struct ifreq:在“linux / if.h”和手册页中有不同的定义

在在线手册页netdevice(7) – Linux手册页中 ,ifreq结构的定义如下: struct ifreq { char ifr_name[IFNAMSIZ]; /* Interface name */ union { struct sockaddr ifr_addr; struct sockaddr ifr_dstaddr; struct sockaddr ifr_broadaddr; struct sockaddr ifr_netmask; struct sockaddr ifr_hwaddr; short ifr_flags; int ifr_ifindex; int ifr_metric; int ifr_mtu; struct ifmap ifr_map; char ifr_slave[IFNAMSIZ]; char ifr_newname[IFNAMSIZ]; char *ifr_data; }; }; 但是我的linux头显示不同的定义。 以下是/usr/include/linux/if.h中的定义我正在使用的内核版本是Linux 3.18 struct ifreq { […]

TCP死链接检测

我如何检测TCP连接中的死链接? 当有人拉网线时,发生死链接,closuresnetworking接口,打开WiFi或者像我的情况一样拔掉电源。 保持活跃只适用于客户端,但不适用于服务器。 服务器只是接收数据,从来没有发送使用TCP_USER_TIMEOUT将无法正常工作,因为发送q将永远是空的。 我不想实现速度损失的应用层协议的原因。 (不再有零拷贝) 有一件事情是发送oob数据,但因为你不应该再使用它了… 在下面的testing结束后,你将会在预期的短暂时间之后closures客户端连接。 但服务器会认为它的连接,永远…等3个小时… 我在3.13(Kubuntu)和3.18(OpenWrt)Linux内核上testing了这个。 这是一个错误? 到目前为止,我已经阅读了许多tcp / socket编程书籍,根本没有帮助。 请请球员我需要你的帮助:) 我使用asynchronous/非阻塞io(epoll),所以发送和rcv超时不会工作。 UPDATE2:现在切断x64 / x86的源代码 ADD:我想我可以用epoll事件来捕捉错误。 但是,如果发生错误,我需要问套接字吗? 我到目前为止的尝试: #define MAX_EVENTS 64 #define CON_RETRY_TIMEOUT 10 /* time to wait in sec until next connect attempt */ #define CON_TIMEOUT 10 /* time in sec after which stop trying to connect */ #define CON_IDLE […]