Errno 111 连接被拒绝 - Python Mininet API 主机客户端/服务器没有连接? [英] Errno 111 Connection refused - Python Mininet API hosts client/server no connection?

查看:118
本文介绍了Errno 111 连接被拒绝 - Python Mininet API 主机客户端/服务器没有连接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Mininet 的新手,我正在尝试找到一种方法,在 Python 中使用脚本来使用 Mininet 执行一些测试.更准确地说,我想构建拓扑并将一些 xmlrpc 请求从一台主机发送到另一台主机.我最近发现了如何使用 mininet API.问题是我无法从客户端连接到服务器 o 获得响应,我已经使用来自客户端主机的 telnet 10.0.0.x 12345 命令进行了测试并得到了一个 连接拒绝.代码如下:

<块引用>

topology_test.py

导入子流程从时间导入时间,睡眠从信号导入SIGINT从 xmlrpc.server 导入 SimpleXMLRPCServer导入 xmlrpc.client 作为 cl从 mininet.util 导入 pmonitor从 mininet.topo 导入拓扑从 mininet.net 导入 Mininet从 mininet.util 导入 dumpNodeConnections从 mininet.log 导入 setLogLevel,信息从 mininet.cli 导入 CLI# mininet 拓扑类 MyTopology(拓扑):def build(self, n=2):switch = self.addSwitch(s1")嵌入器 = self.addHost(嵌入器")self.addLink(嵌入器,开关)# Python 的 range(N) 生成 0..N-1对于范围内的 h(n):主机 = self.addHost(服务器%s"% (h + 1))self.addLink(主机,开关)def simpleTest():创建并测试一个简单的网络"output = subprocess.run([sudo", mn", -c"])打印(输出)秒 = 10拓扑 = MyTopology(n=4)净 = 迷你网(拓扑)网络开始()打印(转储主机连接")dumpNodeConnections(net.hosts)打印(测试网络连接")net.pingAll()h1 = net.get(server1")p1 = h1.popen("python3 myServer.py -i %s &"% h1.IP())h2 = net.get(嵌入器")h2.cmdPrint("telnet 10.0.0.2 12345")# CLI(网络)p1.terminate()网络停止()如果 __name__ == __main__":# 告诉 mininet 打印有用的信息setLogLevel(信息")简单测试()

<块引用>

server.py

from xmlrpc.server import SimpleXMLRPCServer进口插座导入字符串导入套接字服务器导入操作系统导入系统从子流程导入 Popen, PIPEx = int(sys.argv[1])尝试 = 0类 SimpleThreadedXMLRPCServer(socketserver.ThreadingMixIn, SimpleXMLRPCServer):allow_reuse_address = True类函数:# var_str = "yyyaaa";def guess_number(self, n):全球尝试尝试 = 尝试 + 1如果 n >X:msg = "数字太高";如果 n 

<块引用>

客户端.py

import xmlrpc.client as cl地址=10.0.0.2";端口 = 8100# rhost = xmlrpclib.Server("http://" + addr + ":" + str(port))rhost = cl.Server("http://" + addr + ":" + str(port))# msg = rhost.str_get()# 打印(味精)# inp = "";print(猜一个1到100之间的数字")打印()而 1:# msg = rhost.str_get()# 打印(味精)inp = input(>")msg = rhost.guess_number(int(inp))打印(味精)如果找到"在消息中:sys.exit(0)

<块引用>

向主机执行服务器/客户端脚本

host1.sendCmd(python3 server.py")host2.cmdPrint(python3 client.py")

如果我使用不同的 xterm 窗口运行 mininet CLI 中的所有内容,但工作正常,但是当使用 mininet API 时,没有任何工作正常,我已经还尝试了一些不同的客户端/服务器脚本,有时它可以工作.实际上,它仅在第一次运行时起作用.所以我在想也许有一种方法可以使用 subprocess 打开 xterm 窗口,然后在 xterm 中使用一些 管道运行命令子进程.我希望一切都通过 python 脚本运行,而不是手动运行.任何人都可以给我任何帮助吗?

解决方案

为什么不使用 mininet 的 python 接口来实现呢?从您的问题来看,您似乎想获取 sudo mn 默认创建的节点的名称.

在这种情况下,为什么不将以下内容添加到您的 Python 中:

from mininet.topo import SingleSwitchTopo从 mininet.net 导入 Mininet从 mininet.node 导入 CPULimitedHost从 mininet.link 导入 TCLink如果 __name__ == '__main__':拓扑 = SingleSwitchTopo()net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink)网络开始()节点 = net.items()node_names, _ = zip(*nodes)打印(节点名称)网络停止()

SingleSwitchTopo 是 mn 默认使用的(两台主机连接到一个交换机).net.items() 为您提供节点名称和 ID 的元组,请参阅 解决方案

Why not use mininet's python interface to achieve this? From your question it seems like you want to get the names of the nodes that sudo mn creates by default.

In that case why not just add the following to your python:

from mininet.topo import SingleSwitchTopo
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink

if __name__ == '__main__':
    topo = SingleSwitchTopo()
    net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink)

    net.start()

    nodes = net.items()
    node_names, _ = zip(*nodes)

    print(node_names)
    net.stop()

SingleSwitchTopo is the one that mn uses by default (two hosts connected to a single switch). net.items() gives you a tuple of the node's names and ids see here. Perhaps I misunderstand your question, but seems like trying to access it via subprocess when there is an API is overcomplicating an otherwise simple task.

这篇关于Errno 111 连接被拒绝 - Python Mininet API 主机客户端/服务器没有连接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆