天天看点

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