zoukankan      html  css  js  c++  java
  • Python_NAT

    sockMiddle_server.py

     1 import sys
     2 import socket
     3 import threading
     4 
     5 #回复消息,原样返回
     6 def replyMessage(conn):
     7     while True:
     8         data = conn.recv(1024)
     9         conn.send(data)
    10         if data.decode().lower() == 'bye':
    11             break
    12     conn.close()
    13 
    14 def main():
    15     sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    16     sockScr.bind(('', port))
    17     sockScr.listen(200)
    18     while True:
    19         try:
    20             conn, addr = sockScr.accept()
    21             #只允许特定主机访问本服务器
    22             if addr[0] != onlyYou:
    23                 conn.close()
    24                 continue
    25             #创建并启动线程
    26             t = threading.Thread(target=replyMessage, args=(conn,))
    27             t.start()        
    28         except:
    29             print('error')
    30 
    31 if __name__ == '__main__':
    32     try:
    33         #获取命令行参数
    34         port = int(sys.argv[1])
    35         onlyYou = sys.argv[2]
    36         main()
    37     except:
    38         print('Must give me a number as port')
    39         

    sockMiddle.py

     1 import sys
     2 import socket
     3 import threading
     4 
     5 def middle(conn, addr):
     6     #面向服务器的Socket
     7     sockDst = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     8     sockDst.connect((ipServer,portServer))
     9     while True:
    10         data = conn.recv(1024).decode()
    11         print('收到客户端消息:'+data)
    12         if data == '不要发给服务器':
    13             conn.send('该消息已被代理服务器过滤'.encode())
    14             print('该消息已过滤')
    15         elif data.lower() == 'bye':
    16             print(str(addr)+'客户端关闭连接')
    17             break
    18         else:
    19             sockDst.send(data.encode())
    20             print('已转发服务器')
    21             data_fromServer = sockDst.recv(1024).decode()
    22             print('收到服务器回复的消息:'+data_fromServer)
    23             if data_fromServer == '不要发给客户端':
    24                 conn.send('该消息已被代理服务器修改'.encode())
    25                 print('消息已被篡改')
    26             else:
    27                 conn.send(b'Server reply:'+data_fromServer.encode())
    28                 print('已转发服务器消息给客户端')
    29         
    30     conn.close()
    31     sockDst.close()
    32 
    33 def main():
    34     sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    35     sockScr.bind(('', portScr))
    36     sockScr.listen(200)
    37     print('代理已启动')
    38     while True:
    39         try:
    40             conn, addr = sockScr.accept()
    41             t = threading.Thread(target=middle, args=(conn, addr))
    42             t.start()
    43             print('新客户:'+str(addr))
    44         except:
    45             pass
    46         
    47 if __name__ == '__main__':
    48     try:
    49         #(本机IP地址,portScr)<==>(ipServer,portServer)
    50         #代理服务器监听端口
    51         portScr = int(sys.argv[1])
    52         #服务器IP地址与端口号
    53         ipServer = sys.argv[2]
    54         portServer = int(sys.argv[3])
    55         main()
    56     except:
    57         print('Sth error')

    sockMiddle_client.py

     1 import sys
     2 import socket
     3 import threading
     4 
     5 def middle(conn, addr):
     6     #面向服务器的Socket
     7     sockDst = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     8     sockDst.connect((ipServer,portServer))
     9     while True:
    10         data = conn.recv(1024).decode()
    11         print('收到客户端消息:'+data)
    12         if data == '不要发给服务器':
    13             conn.send('该消息已被代理服务器过滤'.encode())
    14             print('该消息已过滤')
    15         elif data.lower() == 'bye':
    16             print(str(addr)+'客户端关闭连接')
    17             break
    18         else:
    19             sockDst.send(data.encode())
    20             print('已转发服务器')
    21             data_fromServer = sockDst.recv(1024).decode()
    22             print('收到服务器回复的消息:'+data_fromServer)
    23             if data_fromServer == '不要发给客户端':
    24                 conn.send('该消息已被代理服务器修改'.encode())
    25                 print('消息已被篡改')
    26             else:
    27                 conn.send(b'Server reply:'+data_fromServer.encode())
    28                 print('已转发服务器消息给客户端')
    29         
    30     conn.close()
    31     sockDst.close()
    32 
    33 def main():
    34     sockScr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    35     sockScr.bind(('', portScr))
    36     sockScr.listen(200)
    37     print('代理已启动')
    38     while True:
    39         try:
    40             conn, addr = sockScr.accept()
    41             t = threading.Thread(target=middle, args=(conn, addr))
    42             t.start()
    43             print('新客户:'+str(addr))
    44         except:
    45             pass
    46         
    47 if __name__ == '__main__':
    48     try:
    49         #(本机IP地址,portScr)<==>(ipServer,portServer)
    50         #代理服务器监听端口
    51         portScr = int(sys.argv[1])
    52         #服务器IP地址与端口号
    53         ipServer = sys.argv[2]
    54         portServer = int(sys.argv[3])
    55         main()
    56     except:
    57         print('Sth error')
    '''
    启动3个终端cd到文件目录后:各终端执行一条语句
    python sockMiddle_server.py 10000 10.2.1.2
    python sockMiddle.py 30800 10.2.1.2 10000
    python sockMiddle_client.py 10.2.1.2 30800
    '''
  • 相关阅读:
    张建(北京工业大学软件学院副教授)_百度百科
    孤独患者马天宇:独自生存我也会适应得很好_红人访_腾讯娱乐_腾讯网
    zz
    java~springboot~ibatis Invalid bound statement (not found)原因
    数据库~dotnetcore连接Mysql插入中文失败
    k8s~术语解释
    springboot~让我习惯了TDD的开发模式
    POJ 2498 Martian Mining
    Java中的DeskTop类
    我和ip_conntrack不得不说的一些事
  • 原文地址:https://www.cnblogs.com/cmnz/p/7087460.html
Copyright © 2011-2022 走看看