2016-08-09 47 views
0

シンプルなリモートシェルをしたい。私はcomunicateにソケットを使用していて、LANで動作します。今、私の友人は自分のクライアントからサーバスクリプトに接続しようとしていますが、それはできません。 私はポート4333の公開を開いて、ルータに10001プライベートに関連づけました。Pythonを使ったリモートシェル

ところで私はIPをXXに置き換えました。

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

# Client's script 


import socket 
import sys 
import os 

# I create a TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

server_address = ('XX.XXX.XX.XX', 4333) 
sock.connect(server_address) 


datos = sock.recv(30) 

comando = str(datos) 
os.system(comando) 

=========

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

# Server's script 


import socket 
import sys 

# I create the TCP/IP socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

direc = socket.gethostbyname(socket.gethostname()) 
# Socket link 
server_address = (direc, 10001) 
connection = sock.bind(server_address) 

sock.listen(1) 

coman = '' 
while coman != 'salir': 
    # Awaiting conecction 
    print "Esperando conexion..." 
    connection, client_address = sock.accept() 
    coman = raw_input("Introduce comando: ") 
    connection.sendall(coman) 


connection.close() 
+0

サーバーはポート10001でリッスンしていますが、クライアントはポート4333に接続しようとしています。IPアドレスが正しい場合でも動作する方法はありません。 –

答えて

0

direcの値は何ですか?サーバーが動作するための接続可能なIPアドレスである必要があります。つまり、お使いのマシンと同じLANにいても、127.0.0.1はあなたの友人にとっては機能しません。

sock.bind()は、ソケットがdirec10001への接続のみをリッスンすることを意味します。 0.0.0.0を使用して「全体のインターネット」を表すことができます。

関連する問題