我一直使用的英特尔开发工具包包括远程pipe理function (请参阅Ubuntu的手册页 ),在操作系统挂起时允许远程重启。
它具有在与操作系统共享的IP地址上监听几个端口(具体地说是16992和16993)的能力。 (通过侦听DHCP请求或发出自己的;我不知道,但无论哪种方式,它在这种模式下使用共享的MAC地址)
我有一个单独的IP地址运行,因为我担心一个潜在的用例: AMT如何防止主机networking堆栈与它冲突?
换句话说,英特尔pipe理软件现在正在监听(至less)两个TCP端口,带外和操作系统的知识。 比方说,我启动到远程主机的TCP连接,主机堆栈select16992或16993作为本地端口来侦听[返回到数据包的数据包]。
从远程主机返回的数据包是否会被“篡改”而不能到达操作系统? 还是有一些预防措施,如Linux内核中的英特尔驱动程序知道TCP应该避免端口16992? (似乎不太可能,因为这是一个操作系统无关的function。)或者,也许pipe理界面可以转发stream量发送到端口16992不属于已知的pipe理会话回到主机栈?
无论哪种方式,我不愿意使用这个networking密集型负载,直到我明白这是如何工作的。 我搜查了英特尔文档 ,也找不到任何东西。
我想这可以通过启动约30,000个TCP连接来testing,并检查连接是否工作,即使端口重叠。 但我还没有机会这样做。
(脚注:我意识到这个问题与基于英特尔®博锐™处理器的计算机如何维护IP连接类似,但是这些问题通常会解决连接问题,而不是连接到与主机堆栈重叠的特定TCP端口。
在configurationAMT监听共享IP地址之后,我在上面的注释中运行了kasperd提到的testing。 (对于我自己的远程主机与SSH服务器,当然不是实际的example.com )这是结果:
正面的testing用例(使用未被 AMT使用的端口):
$ nc -p 16991 example.com 22 SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.4 ^C $
否定testing用例(使用AMT使用的端口):
$ nc -p 16992 example.com 22 $
(几分钟后,否定testing用例超时并返回到shell提示符。)
正如你所看到的那样,返回到端口16992的数据包在到达主机的TCP / IP协议栈之前就被丢弃了。
build议:如果可靠的networking对您很重要,请不要在与主机TCP / IP堆栈相同的IP地址上启用AMT!
从远程主机返回的数据包是否会被“篡改”而不能到达操作系统?
来自远程主机的带“AMT-ports”的数据包永远不会到达任何操作系统。 它们被Intel ME / AMT拦截。 默认情况下,它们是端口16992-16995,5900(AMT版本6+),623,664。
应该注意的是,AMT旨在作为客户端OOBM技术而不是服务器之一。 因此,可能会发生这样的情况,即您的计算机决定使用AMT端口,但仅限于您专门configuration的情况。 大多数操作系统都提供了预configuration的临时端口,范围从49152到65535,如IANA规范所build议的,一些Linux发行版为32768到61000,以及1025-5000的旧Windows。
所以从我的angular度来看,使用AMT的共享IP是省时的,因为它的端口不在临时的范围内(除非你知道你在做什么,并且改变这个特定的设置),并且不应该被任何应用用作监听端口。
一种解决scheme可能是使用netsh设置Windows TCP堆栈的端口。
默认情况下,Windows使用端口49152 >> 65636(或任何上限)因此,使用AMT是非常安全的。 您可以使用netsh设置端口范围。 例如,我总是使用大约1000个端口的周边机器。
此外,英特尔剥离AMT命令,并将这些端口上的所有其他stream量(实际上是16991-16995!)传递给操作系统(如果存在操作系统)。 所以如果你有一个在AMT范围内打开一个端口的应用程序,stream量仍然会通过操作系统传递给应用程序,因为就像我所说的那样,Intel只会取消AMTpipe理命令。 它不太可能你的应用程序正在发送AMT命令。