1. 程式人生 > >python3的soker模組實現功能

python3的soker模組實現功能

模擬和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))