天天看點

47. Python socket程式設計 2

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} &gt;&gt;&gt; "</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) &gt; </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) &gt; </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}&gt;&gt; "</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