Bridge网络模式下Linux虚拟机和主机进行通信

我的VMware版本是8.0.3。其他版本的设置应该大致相同。

1、注意我们的网络模式是Bridge

2、我们的网卡设置

3、目标虚拟机(Linux)的IP

4、我的主机的IP地址

5、网络调试助手的设置

6、上一段用来调试网络的代码。这段代码使用UDP进行通信,主要的作用是应答式的,一回一答。

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#define BUFLEN 255  

int main(int argc, char **argv)
{
    struct sockaddr_in peeraddr, localaddr;
    int sockfd;
    char recmsg[BUFLEN+1];
    int socklen, n;  

    if(argc!=5){
        printf("%s <dest IP address> <dest port> <source IP address> <source port>\n", argv[0]);
        exit(0);
    }  

    sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    if(sockfd<0){
        printf("socket creating err in udptalk\n");
        exit(1);
    }
     printf("IP address Checking!\n");
    socklen = sizeof(struct sockaddr_in);
    memset(&peeraddr, 0, socklen);
    peeraddr.sin_family=AF_INET;
    peeraddr.sin_port=htons(atoi(argv[2]));
    if(inet_pton(AF_INET, argv[1], &peeraddr.sin_addr)<=0){
        printf("Wrong dest IP address!\n");
        exit(0);
    }
    memset(&localaddr, 0, socklen);
    localaddr.sin_family=AF_INET;
    if(inet_pton(AF_INET, argv[3], &localaddr.sin_addr)<=0){
        printf("Wrong source IP address!\n");
        exit(0);
    }
    printf("try to bind local address \n");
    localaddr.sin_port=htons(atoi(argv[4]));
    if(bind(sockfd, &localaddr, socklen)<0){
        printf("bind local address err in udptalk!\n");
        exit(2);
    }
 printf("Please Type Some Message To Server\n");
    if(fgets(recmsg, BUFLEN, stdin) == NULL) {
        printf("get nothing exit\n");
        exit(0);
    }
 //    printf("end of fgets \n");
    if(sendto(sockfd, "HELLO", strlen("HELLO"), 0, &peeraddr, socklen)<0){
        printf("sendto err in udptalk!\n");
        exit(3);
    }
 printf("end of sendto \n");
      printf("start of recv&send message loop!\n");
    for(;;){
        /*recv&send message loop*/
        printf("Waiting For Message...!\n");
        n = recvfrom(sockfd, recmsg, BUFLEN, 0, &peeraddr, &socklen);
        if(n<0){
            printf("recvfrom err in udptalk!\n");
            exit(4);
        }else{
            recmsg[n]=0;
            printf("peer:%s\n", recmsg);
        }
     printf("Please Type Some Message To Server\n");
        if(fgets(recmsg, BUFLEN, stdin) == NULL) exit(0);
        if(sendto(sockfd, recmsg, strlen(recmsg), 0, &peeraddr, socklen)<0){
            printf("sendto err in udptalk!\n");
            exit(3);
        }
    }
}

下图是以上代码运行的实例

其中./udptalk 192.168.41.24 2000 192.168.92.128 2000  是启动的命令。在应用这段代码的时候,把192.168.41.24替换成要接受消息的主机(destination)。第一个2000是目标端口。192.168.92.128是本机地址,第二个2000是发送端口。

 

注意事项:

你要确保默认网关是有效的,不然虚拟机和主机的通信就会失败。比如说你的网关设的是局域网内的一台主机,但是跟局域网相连的网线又被你拔了,这时候,虚拟机和主机的通信就会失败。

 

其实最好将虚拟机的所用的虚拟网卡的网关设成真实主机的地址,这样就不用再借助一台主机来充当网关。(如下图所示)

 

 

作者:kissazi2 
出处:http://www.cnblogs.com/kissazi2/ 
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/kissazi2/archive/2013/06/14/3136153.html

时间: 2024-10-29 14:26:03

Bridge网络模式下Linux虚拟机和主机进行通信的相关文章

网络编程-window下Linux虚拟机的网卡操作

问题描述 window下Linux虚拟机的网卡操作 在window系统下安装Linux虚拟机,在进行网络操作时,是使用Linux内核的TCP/IP协议栈直接发包,还是需要通过虚拟机程序转到window内核,通过window的TCP/IP协议栈发包呢?求大神指导.

openvpn tun模式下客户端与内网机器通信

一.实际问题 先来介绍下目前的基本情况,如下: 1.openvpn服务器单网卡,通过硬件防火墙把openvpn服务器的1194端口映射到公网. 2.openvpn服务器所在的网段为192.168.5.1/24网段 3.openvpn客户端获得IP地址为10.8.0.1/24网段 要求10.8.0.1/24网段能访问192.168.5.1/24网段的服务器. 通过前两篇文章,可知我们现在的openvpn客户端已经可以正常连接openvpn服务器,但是还不能和公司内网的其他机器进行正常通信.如下:

虚拟机02:三种网络模式

虚拟网络编辑器 打开VMware Workstation,点击"编辑"->"虚拟网络编辑器". 其中VMnet*表示网络名称,VMnet信息显示网络的模式. VMware Workstation默认有三种网络模式:桥接(Bridge)模式,对应VMnet0:仅主机(HostOnly)模式,对应VMnet1:NAT模式,对应VMnet8. 每一个VMnet,都是一个网络,可以理解为一个交换机. 我们也可以根据需要自己添加或移除网络,在界面上有相应的按钮.注意:所

VMware虚拟机三种网络模式的区别

提到VMware大家就想起了虚拟机技术,虚拟机技术在最近的几年中得到了广泛的发展,一些大型网络服务商都开始采用虚拟机技术,不仅节省了投资成本,更节约了能源的消耗. 我们知道VMware也分几种版本,普通用户最常用的就是Workstation,但是不管使用哪种版本,我们都能发现在安装过程中让我们选择 网络模式.在默认情况下会选中桥接模式,但有用户会问其他模式是干什么用的?有时候选择了其他模式之后就不能上网了.今天小编就和大家一起探讨一下 VMware 3种网络模式的功能和通信规则. 网络模式 我们

VMware虚拟机三种网络模式区别_VMware

我们知道VMware也分几种版本,普通用户最常用的就是Workstation,但是不管使用哪种版本,我们都能发现在安装过程中让我们选择 网络模式.在默认情况下会选中桥接模式,但有用户会问其他模式是干什么用的?有时候选择了其他模式之后就不能上网了.今天小编就和大家一起探讨一下 VMware 3种网络模式的功能和通信规则. 我们首先说一下VMware的几个虚拟设备 VMnet0:用于虚拟桥接网络下的虚拟交换机 VMnet1:用于虚拟Host-Only网络下的虚拟交换机 VMnet8:用于虚拟NAT网

openstack网络模式之vlan分析

openstack neutron中定义了四种网络模式:# tenant_network_type = local# tenant_network_type = vlan# Example: tenant_network_type = gre# Example: tenant_network_type = vxlan本文主要以vlan为例,并结合local来详细的分析下openstack的网络模式.1. local模式此模式主要用来做测试,只能做单节点的部署(all-in-one),这 是因为此

如何优化VMware Linux虚拟机的性能?

目前有很多方法可以改善VMware Linux虚拟机的性能,包括对虚拟硬件进行调整,以及更改默认的软件配置设置. 虽然在VMware管理程序上安装Linux虚拟机很容易,但是默认的.开箱即用的配置并不能充分发挥虚拟机的潜在的最大性能.不过,有一些办法可以对其进行优化. 虚拟硬件 首要需要考虑的是虚拟硬件.VMware产品的每一个新版本都带来了新的虚拟硬件版本,你应该尽可能使用最新的硬件版本,因为和大多数OS一样,补丁和性能改进是增量地添加的. 半虚拟化硬件 半虚拟化硬件本质上是一个硬件的软件实现

hisi平台mii网络模式和rmii网络模式的uboot制作

MII网络uboot编译说明 一:编译生成默认的uboot1. 进入到uboot目录a. cd /home/satan/Hi3518_SDK_V1.0.7.0/osdrv/uboot2. 新建临时文件夹a. mkdir u-boot-2010.06-mii-debug3. 解压a. tar -xzvf u-boot-2010.06.tgz -C u-boot-2010.06-mii-debug4. 进入目录cd u-boot-2010.06-mii-debug/u-boot-2010.065.

Vmware虚拟机下三种网络模式配置

VMware虚拟机有三种网络模式,分别是Bridged(桥接模式).NAT(网络地址转换模式).Host-only(主机模式). VMware workstation安装好之后会多出两个网络连接,分别是VMware Network Adapter VMnet1和VMware Network Adapter VMnet8,这两个是可以在主机的网络连接中可以查看到的,还有一个是VMnet0,可以在virtual network editor中看到.这三个虚拟网络都是VMware安装好之后自动生成的,