我继承了一大段与内部开发的设备对话的代码。所述设备具有一个网络接口(interface),该接口(interface)非常慷慨,而且是临时的:
遗憾的是,修改设备的代码是绝对不可能的。源是可用的,未装箱的硬件可用于测试,但部署的盒子对环境严格密封,并且访问它启动的闪存芯片是一个为期一天的过程。
我有兴趣将这些设备中的几个连接到同一台主机,但我的背景是应用程序、Web 和一些嵌入式 - 而不是网络。每个设备都有一个专用的网络接口(interface)(例如 p1p1、p1p2 等),我认为这应该可以节省我的时间,但我不确定如何设置 Fedora 来进行必要的模拟,而且我不确定如何设置我的应用程序代码区分接口(interface) p1p1 - IP 172.16.0.50 - 端口 9000 上的 UDP 流量和来自接口(interface) p1p2 - IP 172.16.0.50 - 端口 9000 的 UDP 流量,或者指定我想通过 UDP 在 172.16 广播给定的数据报接口(interface) p1p1 上的 .0.50:9000 与接口(interface) p1p2 上的 172.16.0.50:9000。
我相信我可以通过静态路由条目和双向端口转发的 iptables 规则的足够巧妙的组合来实现这一点,但我想在花几天时间研究一个有根本缺陷的方法之前先问一下。什么是让它变得可口的最明智的方法?
最佳答案
简而言之,您想将多个设备连接到一个主机,所有这些设备都具有相同的 IP。您需要处理两个问题 — ARP 缓存和路由。
ARP 缓存将邻居的 IP 映射到 MAC 地址。由于您的所有设备都具有相同的 IP,因此 ARP 缓存会在您的情况下变得困惑,并导致所有流量都被发送到同一个邻居。
我相信在 Linux 下,ARP 缓存是由 (IP, interface) 对索引的。这意味着如果每台设备都连接到不同的接口(interface),ARP 缓存将不会混淆(如果可行,请告诉我们)。另一方面,如果您将所有设备连接到同一个交换机,ARP 缓存就会妨碍(除非您对 VLAN 耍花招)。
在传统的下一跳路由中,路由表由目标 IP 索引。由于您所有的设备都具有相同的 IP,因此传统的下一跳无法区分它们。在源特定路由中,路由表由(dest, src) 对索引。换句话说,源特定路由器可以通过使用源和目标来选择下一跳。
为了使用特定于源的路由,您需要在主机上为每台设备设置不同的 IP。然后,您的应用程序将能够通过在正确的地址上执行 bind 来选择正确的设备。
设置源特定路由表在 LARTC 的第 4.1 节中有描述。 .有关源特定路由的更多信息,请参阅 draft-troan-homenet-sadr或 this paper about source-specifig routing (免责声明——我是合著者)。
关于linux - 围绕疯狂的设备接口(interface)进行路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30387753/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle