libpcap findalldevs在Solaris 11上的guest虚拟机LDOM中不起作用

时间:2016-03-16 16:28:08

标签: solaris libpcap

环境
适用于SPARC的Oracle Solaris 11
在非主(访客)逻辑域(LDOM)中运行 使用root访问权限登录。

问题
我的应用程序使用 libpcap 来捕获网络流量。当我的应用程序( myTestApp )调用libpcap findalldevs 时,我的应用程序只看到一个网络接口(“lo0”),但 ifconfig -a 显示许多更多接口。

我的应用程序静态链接到 libpcap (版本1.3)。 构建机器 SunOS RS-T5120-01 5.10 Generic_141444-09 sun4v sparc SUNW,SPARC-Enterprise-T5120

为什么我的应用程序无法看到所有网络接口的任何想法?

Linux命令行示例输出

# tcpdump --version

tcpdump version 4.1.1
libpcap version 1.1.1

# uname -a
SunOS g99dnpi802-LD 5.11 11.1 sun4v sparc sun4v


# ./myTestApp -adapters

[Available Adapters]
name: "lo0", description: "", address: 127.0.0.1, mask: 255.0.0.0


# ifconfig -a

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
net0: flags=100001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,PHYSRUNNING> mtu 1500 index 2
        inet 10.99.220.15 netmask ffffff00 broadcast 10.99.220.255
        ether 0:14:4f:fa:e0:8d
net1: flags=100001000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4,PHYSRUNNING> mtu 1500 index 3
        inet 10.99.193.210 netmask ffffff80 broadcast 10.99.193.255
        ether 0:14:4f:f9:d0:9c
lo0: flags=2002000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6,VIRTUAL> mtu 8252 index 1
        inet6 ::1/128
net0: flags=120002000840<RUNNING,MULTICAST,IPv6,PHYSRUNNING> mtu 1500 index 2
        inet6 ::/0
        ether 0:14:4f:fa:e0:8d
net1: flags=120002000840<RUNNING,MULTICAST,IPv6,PHYSRUNNING> mtu 1500 index 3
        inet6 ::/0
        ether 0:14:4f:f9:d0:9c

# tcpdump -i net1

    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on net1, link-type EN10MB (Ethernet), capture size 65535 bytes
    09:32:29.520815 IP g99dnpi802-LD.ssh > 10.99.8.102.65436: Flags [P.], seq 3397909586:3397909718, ack 1479093081, win 64240, length 132
    09:32:29.520860 IP g99dnpi802-LD.ssh > 10.99.8.102.65436: Flags [P.], seq 132:232, ack 1, win 64240, length 100
    09:32:29.521644 IP 10.99.8.102.65436 > g99dnpi802-LD.ssh: Flags [.], ack 132, win 16379, length 0
    09:32:29.680844 00:14:4f:f9:8d:84 (oui Unknown) > Broadcast, ethertype Unknown (0xcafe), length 90:
            0x0000:  0500 ad85 0939 ffff 0001 ffff 809c 7401  .....9........t.
            0x0010:  0000 004c 0000 0000 8070 00ab 0000 0000  ...L.....p......
            0x0020:  0000 0000 0000 0000 0043 ffff 2074 6167  .........C...tag
            0x0030:  6d61 7374 0672 0014 4ff9 8d84 5f31 3362  mast.r..O..._13b
            0x0040:  650a 0000 0000 0000 84f9 0aab            e...........  

[更新]

以下是在构建计算机和客户计算机上运行以下truss命令的(已编辑)输出。

truss –f –a –vall –l –d –o truss.txt ./myTestApp -adapters

构建机器上的桁架

14365/1:     0.0751 so_socket(PF_INET, SOCK_DGRAM, IPPROTO_IP, "", SOV_DEFAULT) = 3
14365/1:     0.0753 so_socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP, "", SOV_DEFAULT) = 4
14365/1:     0.0755 ioctl(3, SIOCGLIFNUM, 0xFFBE9F50)       = 0
14365/1:     0.0757 ioctl(3, SIOCGLIFCONF, 0xFFBE9F40)      = 0
14365/1:     0.0804 ioctl(3, SIOCGLIFFLAGS, 0xFFBE9DC8)     = 0
14365/1:     0.0806 ioctl(3, SIOCGLIFNETMASK, 0xFFBE9C50)       = 0
14365/1:     0.0809 open64("/dev/lo", O_RDWR)           Err#2 ENOENT
14365/1:     0.0811 open64("/dev/lo0", O_RDWR)          Err#2 ENOENT
14365/1:     0.0813 ioctl(3, SIOCGLIFFLAGS, 0xFFBE9DC8)     = 0
14365/1:     0.0815 ioctl(3, SIOCGLIFNETMASK, 0xFFBE9C50)       = 0
14365/1:     0.0817 ioctl(3, SIOCGLIFBRDADDR, 0xFFBE9AD8)       = 0
14365/1:     0.0819 open64("/dev/e1000g", O_RDWR)           = 5

客户机器上的桁架

6346/1:          0.0315 so_socket(PF_INET, SOCK_DGRAM, IPPROTO_IP, 0, SOV_DEFAULT) = 3
6346/1:          0.0319 so_socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP, 0, SOV_DEFAULT) = 5
6346/1:          0.0320 ioctl(3, SIOCGLIFNUM, 0xFFBEA830)               = 0
6346/1:          0.0321 ioctl(3, SIOCGLIFCONF, 0xFFBEA820)              = 0
6346/1:          0.0322 ioctl(3, SIOCGLIFFLAGS, 0xFFBEA6A8)             = 0
6346/1:          0.0323 ioctl(3, SIOCGLIFNETMASK, 0xFFBEA530)           = 0
6346/1:          0.0327 open64("/dev/lo", O_RDWR)                       Err#2 ENOENT
6346/1:          0.0328 open64("/dev/lo0", O_RDWR)                      = 6
6346/1:          0.0345 ioctl(3, SIOCGLIFFLAGS, 0xFFBEA6A8)             = 0
6346/1:          0.0346 ioctl(3, SIOCGLIFNETMASK, 0xFFBEA530)           = 0
6346/1:          0.0347 ioctl(3, SIOCGLIFBRDADDR, 0xFFBEA3B8)           = 0
6346/1:          0.0347 open64("/dev/net", O_RDWR)                      Err#21 EISDIR
6346/1:          0.0349 ioctl(3, SIOCGLIFFLAGS, 0xFFBEA6A8)             = 0
6346/1:          0.0349 ioctl(3, SIOCGLIFNETMASK, 0xFFBEA530)           = 0
6346/1:          0.0350 ioctl(3, SIOCGLIFBRDADDR, 0xFFBEA3B8)           = 0
6346/1:          0.0351 open64("/dev/net", O_RDWR)                      Err#21 EISDIR

0 个答案:

没有答案