1.擷取百度傳回資訊
<code>import</code> <code>socket</code>
<code>host </code><code>=</code> <code>"www.baidu.com"</code>
<code>port </code><code>=</code> <code>80</code>
<code>ip </code><code>=</code> <code>socket.gethostname(host) </code><code>#擷取通路百度的時候解析出來的IP位址。(vip)</code>
<code>print</code> <code>(</code><code>"connect server ip = {0}"</code><code>.</code><code>format</code><code>(ip))</code>
<code>s </code><code>=</code> <code>socket.socket(socket.AF_INET, socket.SOCK_STREAM)</code>
<code>s.connect((ip, port))</code>
<code>#s.sendall(" ") #python2在sendall()中必須是字元串(str)形式 ,此處不用這種形式。</code>
<code>s.sendall(</code><code>"GET / HTTP/1.1 \r\nHost:www.baidu.com\r\n\r\n"</code><code>.encode(</code><code>"utf-8"</code><code>)) </code><code>#python3在sendall()中必須是位元組(beat)形式</code>
<code>##在制定的http層次的協定上,百度有自己的規定,如果發過去的字元串不符合規定,百度是不會傳回資訊的,要符合對方的規則。</code>
<code>data </code><code>=</code> <code>s.recv(</code><code>2048</code><code>) </code><code>#接收資料</code>
<code>print</code> <code>(data)</code>
2.socket實作ssh連接配接終端
用戶端:
<code>import</code> <code>time</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>"__main__"</code><code>:</code>
<code> </code><code>host </code><code>=</code> <code>"192.168.0.103"</code>
<code> </code><code>port </code><code>=</code> <code>12345</code>
<code> </code><code>s </code><code>=</code> <code>socket.socket(socket.AF_INET, socket.SOCK_STREAM)</code>
<code> </code><code>s.connect((host, port))</code>
<code> </code><code>stat </code><code>=</code> <code>1</code>
<code> </code><code>while</code> <code>1</code><code>:</code>
<code> </code><code>cmd </code><code>=</code> <code>raw_input</code><code>(</code><code>"{0} >>> "</code><code>.</code><code>format</code><code>(host))</code>
<code> </code><code>if</code> <code>cmd.lower() </code><code>=</code><code>=</code> <code>"exit"</code><code>:</code>
<code> </code><code>exit()</code>
<code> </code><code>if</code> <code>not</code> <code>cmd:</code>
<code> </code><code>continue</code>
<code> </code><code>s.sendall(cmd)</code>
<code> </code><code>data </code><code>=</code> <code>s.recv(</code><code>2048</code><code>)</code>
<code> </code><code>if</code> <code>len</code><code>(data) > </code><code>0</code><code>:</code>
<code> </code><code>stat </code><code>=</code> <code>1</code>
<code> </code><code>print</code> <code>(</code><code>"{0}"</code><code>.</code><code>format</code><code>(data))</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>stat </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>time.sleep(</code><code>1</code><code>)</code>
<code> </code><code>if</code> <code>stat </code><code>=</code><code>=</code> <code>5</code><code>:</code>
<code> </code><code>break</code>
服務端:
<code>import</code> <code>commands</code>
<code>host </code><code>=</code> <code>"192.168.0.103"</code>
<code>port </code><code>=</code> <code>12345</code>
<code>print</code> <code>(</code><code>"server host = {0} port = {1}"</code><code>.</code><code>format</code><code>(host, port))</code>
<code>s.bind((host, port))</code>
<code>s.listen(</code><code>6</code><code>)</code>
<code>conn, addrclient </code><code>=</code> <code>s.accept()</code>
<code>print</code> <code>(</code><code>"connect from {0}"</code><code>.</code><code>format</code><code>(addrclient))</code>
<code>stat </code><code>=</code> <code>1</code>
<code>while</code> <code>1</code><code>:</code>
<code> </code><code>cmd </code><code>=</code> <code>conn.recv(</code><code>2048</code><code>)</code>
<code> </code><code>if</code> <code>len</code><code>(cmd) > </code><code>0</code><code>:</code>
<code> </code><code>stat </code><code>=</code> <code>1</code>
<code> </code><code>status, output </code><code>=</code> <code>commands.getstatusoutput(cmd)</code>
<code> </code><code>conn.sendall(output)</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>stat </code><code>+</code><code>=</code> <code>1</code>
<code> </code><code>time.sleep(</code><code>1</code><code>)</code>
<code> </code><code>if</code> <code>stat </code><code>=</code><code>=</code> <code>5</code><code>:</code>
<code> </code><code>break</code>
這個腳本還欠缺很多功能,也存在不少bug,還待後期去完善和修複,待續ing...
3.專門用來SSH的子產品
在python子產品裡面專門用來ssh連接配接的子產品:paramiko
用網頁就可以連接配接上服務端,基于ssh協定,不需要寫服務端
是一個ssh版的用戶端
安裝paramiko
# pip install paramiko
建立連接配接腳本:
vim para.py #注意名字不能用paramiko.py,不然腳本執行過程中會有問題。
<code>import</code> <code>paramiko</code>
<code>client </code><code>=</code> <code>paramiko.SSHClient()</code>
<code>client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) </code><code>#用來設定know-host</code>
<code>client.connect(hostname</code><code>=</code><code>"192.168.0.103"</code><code>, port</code><code>=</code><code>22</code><code>, username</code><code>=</code><code>"root"</code><code>, password</code><code>=</code><code>"1q2w3e"</code><code>)</code>
<code> </code><code>cmd </code><code>=</code> <code>raw_input</code><code>(</code><code>"{0}>> "</code><code>.</code><code>format</code><code>(</code><code>'192.168.0.103'</code><code>))</code>
<code> </code><code>if</code> <code>cmd:</code>
<code> </code><code>stdin, stdout, stderr </code><code>=</code> <code>client.exec_command(cmd)</code>
<code> </code><code>for</code> <code>std </code><code>in</code> <code>stdout.readlines():</code>
<code> </code><code>print</code> <code>(std)</code>
執行即可連接配接伺服器。
本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/2057229