小编Ash*_*mer的帖子

VMWare Fusion 6.0.2网络桥接仅允许某些特定流量

我正在使用OSX Mavericks和VMWare Fusion v6.0.2.我正在运行两个虚拟机,一个是Windows 7 Pro,另一个是Debian Sid.

我不希望通过主机使用NAT网络,我更喜欢将虚拟机直接放在网络上,但我在使VMWare Fusion的桥接网络功能正常工作时遇到了问题.我已将VMWare网络首选项页面设置为将VM桥接到Mac内部WiFi适配器.

两个虚拟机都可以ping通路由器,它们都可以获得有效的DHCP分配的LAN地址.它们都可以通过网桥连接到Internet并浏览和下载文件.

我的问题是当我希望通过其他端口在VM->主机,主机 - > VM或VM-> VM之间进行通信时.例如,如果我尝试从OSX主机SSH到Debian VM,则请求超时.Windows 7 VM上运行了一个SQL Server,但我无法从OSX主机或Debian VM连接到它.Debian VM有一个在端口8080上运行的xsp4 Web服务器,但OSX主机和Debian VM都无法访问它.

我可以从Host-> VM,VM-> Host和VM-> VM ping,没有问题,他们都可以在网络上看到对方,OSX主机正在共享网络文件夹到Windows 7 VM.它似乎允许某些通信,例如DHCP请求,Ping请求,Windows网络共享和Web浏览,但不允许任何其他内容.我关闭了Windows防火墙,关闭了OSX Mavericks防火墙,并且Debian VM没有安装selinux或iptables防火墙.

我在研究这个问题时发现了几个类似的问题线程,但是很多版本都是针对VMWare Fusion的旧版本,或者是针对具有不同网络首选项的VMWare Workstation.

如果我将VMWare的网络设置切换为使用NAT而不是桥接,我可以使这些场景工作到一定程度,但这会混淆VM的IP地址,我想将它们保持在同一网络上.

networking portforwarding vmware-fusion osx-mavericks

5
推荐指数
1
解决办法
6190
查看次数

Rust:从动态加载的库执行特定代码行时的Segfault

我正在Rust中编写一个简单的基于插件的系统,以获得使用该语言的一些技能和经验.我的系统动态加载库并在运行时执行它们以初始化每个插件.我在从动态加载的库中执行代码时遇到了一个有趣的段错误问题.

这是加载和运行插件初始化函数的代码:(这个位工作正常)

pub fn register_plugins<'rp>(&'rp mut self)
{
    let p1 = match DynamicLibrary::open(Some("librust_plugin_1.so")) {
            Ok(lib) => lib,
            Err(error) => fail!("Could not load the library: {}", error)
    };
    let s1: extern "Rust" fn(&PluginSystem) = unsafe {
        match p1.symbol("init") {
            Err(error) => fail!("Could not load function init: {}", error),
            Ok(init) => mem::transmute::<*mut u8, _>(init)
        }
    };
    s1(&self.ps);
}
Run Code Online (Sandbox Code Playgroud)

这是插件库中的init函数:

#[no_mangle]
pub fn init(ps:&mut PluginSystem)
{
    ps.register_plugin("ps1"); //<-- Segfault is in this method
    ps.add_new_hook_with_closure("onLoad", "ps1", "display greeting.", 10, test1);
    println!("Initialized plugin.");
}
Run Code Online (Sandbox Code Playgroud)

如评论所述,segfault发生在名为ps的PluginSystem结构的register_plugin函数中.这个结构是从调用方法借来的(在第一个代码块中). …

segmentation-fault dlopen dynamic-library rust

5
推荐指数
1
解决办法
934
查看次数

这些数据包使用什么校验和算法?

我正在构建一个 python 库来操纵我的廉价中文 iGK64 机械键盘的照明和可编程功能,因为 Windows 驱动程序应用程序在 Linux 上不起作用。

我在 Windows VM 中运行了制造商的驱动程序应用程序并捕获了 USB 数据包进行分析。在过去几天的空闲时间里,我一直在分解这些数据包的内容,以确定不同的部分是什么,以及它们的作用。

到目前为止,我已经确定了这些事实:

  • 发送到键盘和从键盘接收的每个数据包都是 64 字节。
  • 第一个字节是某种目的地指示符。我将其称为“注册 ID”,可能更准确地说是“页面 ID”。该字段的长度为 1 个字节。
  • 第二个字节是“指令”。例如,0x02 表示“写入”,0x01 表示“读取”,我也见过 0x09(我认为是“执行”)和 0x00(我认为是 noop 或 ping)。该字段的长度为 1 个字节。
  • 接下来的部分是“地址”,它是一个16位无符号整数指示在那里读或写操作。该字段长 2 个字节,小端。
  • 接下来是有效载荷长度。一个 16 位无符号整数,指示要读取或写入的字节数。该字段长 2 个字节,小端。
  • 在有效载荷本身之前是校验和。一个 16 位值,我对此知之甚少。字段长 2 个字节,我假设为小端。
  • 有效载荷是最后的。它的长度在 0 到 56 字节之间,但用零填充,因此总数据包大小为 64 位。
  • 在一起看起来像 reg:{} instr: {} addr: {} len: {} checksum: {} payload: {}

下面是一个数据包的例子:

生的:

0x220200003800E670FFFFFFFFFFFFFFFF010000020200000204000002080000021000000220000002FFFFFFFFFFFFFFFF00040002000500020006000200070002

解构:

reg: 0x22 instr: 0x02 addr: 0x0000 len: 56 …
Run Code Online (Sandbox Code Playgroud)

python algorithm usb checksum driver

5
推荐指数
1
解决办法
173
查看次数