python3的soker模組實現功能
阿新 • • 發佈:2018-11-28
模擬和linux互動,只可以使用檢視命令
服務端
主要是建立一個服務端,在建立服務端的時候,主要步驟如下:
建立socket物件socket——》繫結IP地址和埠bind——》監聽listen——》得到請求accept——》接收請求recv——》傳送資訊send
import socket import subprocess server = socket.socket() #建立物件 server.bind(('', 8888)) #繫結程式碼(IP地址,埠號),第一個可以寫IP地址或者localhost,如果不寫的話,說明允許想和太主機上的所有ip都可以接受連線server.listen(5) #監聽程式碼,設定最大連線數,引數為整數,當第一個連線上的時候,其他的都不會連線,等第一個退出的時候,其他的頂上。 print('等待連線.....') conn, addr = server.accept() #被動接受請求 print('已連線......') while True: #死迴圈 data = conn.recv(10240) #接受訊息,最多接收的位元組數為10240,那麼多餘的字元將會在下次接收的過程中進行接收。 cmd = subprocess.Popen(data.decode('utf-8'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout = cmd.stdout.read() stderr = cmd.stderr.read() conn.send(stdout + stderr) #傳送訊息
客戶端
建立socket物件socket——》connet連線伺服器——》獲取訊息recv——》傳送訊息send
import socket import threading client = socket.socket() client.connect(('192.168.29.137', 8888)) #客戶端連線服務端 while True: info = input('===>:') #互動 if not info:continue client.send(info.encode('utf-8')) data = client.recv(10240) #接收訊息程式碼 print(data.decode('utf-8'))
模擬通訊軟體,可以雙方對話
服務端
import socket import subprocess import threading server = socket.socket() server.bind(('', 8888)) server.listen(5) print('等待電話.....') conn, addr = server.accept() print('電話來了......') def recv(): while True: data = conn.recv(10240) print(data.decode('utf-8')) def send(): while True: data = input('===>:') conn.send(data.encode('utf-8')) t1 = threading.Thread(target=recv) t2 = threading.Thread(target=send) t1.start() t2.start()
客戶端
import socket import threading client = socket.socket() client.connect(('localhost', 8888)) def send(): while True: info = input('===>:') client.send(info.encode('utf-8')) def recv(): while True: data = client.recv(1024) print(data.decode('utf-8')) t1 = threading.Thread(target=send) t2 = threading.Thread(target=recv) t1.start() t2.start()
檢視測試主機和埠通不通
import re import socket def sendmail(aa): import smtplib from email.mime.text import MIMEText from email.header import Header sender = '傳送的郵箱' receiver = '接收的郵箱' subject = '報警' username = '郵箱使用者名稱' password = '郵箱密碼' msg = MIMEText(aa, 'plain', 'utf-8') msg['Subject'] = Header(subject, 'utf-8') msg['From'] = 'Tim<傳送郵箱>' msg['To'] = "接收郵箱" smtp = smtplib.SMTP() smtp.connect('smtp.163.com') smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit() client = socket.socket() host_list = ['192.168.254.24:1111','192.168.7.118:423'] for item in host_list: ip = re.compile('(.*?):(.*)').search(item).group(1) port = re.compile('(.*?):(.*)').search(item).group(2) result = client.connect_ex((ip, int(port))) if result != 0: sendmail('%s不通l,%s埠不通l' % (ip,port))