我的计算机发送的内容和路由器收到的内容有何不同?

时间:2017-05-04 01:36:37

标签: python selenium firefox lan tcpdump

由于这是我的第一个问题,请原谅我,如果我做错了什么,我很乐意学习:)

我试图解决这个问题大约3个月但是无法解决这个问题。我认为错误是我的错,但对我来说唯一清楚的是错误。但是,我已经没有想法了。

TL; DR:
我的桌面和路由器出现问题,似乎捕获了不同的流量,而这两者之间没有任何关系。我已经多次重写了我的脚本,但无法让它工作。

以下是我的背景:
在我的学士论文中,我对中间件行为感兴趣。 为此,我有一个设置,其中我使用dnsmasq和isc-dhcp-server将一台Ubuntu Server机器设置为路由器,另一台运行Ubuntu Desktop的机器通过以太网连接到服务器机器子网。 为了测试中间盒,我在每个中间盒上使用Firefox + Selenium,在桌面和服务器(路由器)之间没有任何东西,每次调用Alexa顶级站点(用于前10或前100的测试目的)。与此同时,我在桌面和服务器上使用tcpdump记录请求的域。但是对于我的问题,中间盒并不重要,它们只是说明了我为什么这样做。

为了说明我的设置,我制作了这个图表(由于我没有足够的声誉,我不允许发布图片):

桌面循环遍历Alexa列表,而服务器处于无限循环中,直到它从桌面接收退出消息。 在桌面脚本中,每个步骤之间都有超时(我已尝试过3到60秒之间的超时)。它通过网站循环访问Alexa列表 Tcpdumps根据当前域+ middlebox / plain命名 然后另一个python脚本加载tcpdumps,循环通过dns数据包并创建一个带有IP:域映射的字典。然后,它创建一个字典,其中Alexa列表中的每个域都作为键,并且值包含一组随后调用的域。这适用于服务器上捕获的流量和桌面上捕获的流量,但它们都使用桌面DNS词典 最后,我有一个脚本比较生成的词典。

为了验证Desktop和Server之间的差异,我还比较了Plain页面。但是,在桌面和服务器上捕获的域之间始终存在差异。每个alexa域通常有2到5个子类不同(这些是我希望其他Alexa域可以调用的子类。例如wikipedia.org可能不会调用facebook.com,但facebook.com本身可能就是.Facebook出现作为子下载维基百科是什么让我感到恼火)。根据我的理解,情况并非如此。一开始我使用的是Python库PyShark,但由于出现了这些问题,我认为直接使用tcpdump可能会起到作用。 我尝试设置更大的超时,我尝试捕获单个文件中的所有流量,我尝试重写我认为可能是错误的每行代码。 某处必须有错误,但我似乎无法找到它。我知道总有一些包丢失,但特别是当通过以太网直接连接时,我无法想象它是如此高。
我期望selenium / firefox和tcpdump之间的组合出现意外行为。启动/关闭这些问题的延迟可能是一个问题,但我不认为这可能超过60秒。我还希望Ubuntu Desktop能够在我运行测试的同时发送自动更新请求和其他系统服务,但首先我不认为他们做了那么多请求,其次我设置了我的iptables最多只允许来自启动python脚本的用户的tcp请求。

非常感谢您抽出宝贵时间。 如果您有任何想法/评论,我可能会出错,我很高兴听到它。如果您还有其他问题,请不要犹豫。

编辑: (澄清我想要实现的目标)
我的假设是,如果我使用桌面计算机浏览器调用域并捕获桌面和路由器上的网络流量,则两个捕获都应包含相同的数据包。 如果我有一个阻止某些域的中间件并将其放在台式计算机和路由器之间,那么比较PC上和路由器上捕获的流量中出现的域应该恰好产生中间盒阻塞的那些域。

我的问题
即使没有中间件,捕获的流量也存在差异,我也不知道它来自哪里。

示例(我做了这个,我将在我回到大学后发布真实的一个):
预期行为

  

wikipedia.org:{在PC上但不在路由器上:[],在路由器上但不在PC上:[]}
  facebook.com:{在PC上但不在路由器上:[],在路由器上但不在PC上:[]}

实际行为

  

wikipedia.org:{在PC上,但不在路由器上:[ facebook.com ],在路由器上但不在PC上:[ ]}   facebook.com:{在PC上但不在路由器上:[],在路由器上但不在PC上:[]}

0 个答案:

没有答案