【Socket】

  本文记录了一些socket模块的简单应用,对于具体原理还没来得及深究。

■  利用socket模块进行端口连接验证和扫描

  在linux中常用nc命令来进行远端端口是否开放的验证。但是这个命令并不是系统自带的,所以还比较麻烦。如果利用python自带的socket模块就可以比较自由地进行端口验证了。是这样用的:

import socket

def port_check(host,port):
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #建立socket对象
sk.settimeout(1) #设置超时,否则可能等很久才会返回连不通端口的信息
try:
sk.connect((host,port)) #进行socket层面的连接,注意参数是一个tuple
except socket.error as e:
print "{}:{} is not opened. {}".format(host,port,str(e))
else:
print "{}:{} is opened.".format(host,port)
finally:
sk.close() if __name__ == '__main__':
port_check('127.0.0.1',22)

  如果想要对远程主机进行端口扫描的话,只要在这个函数外面包一层for i in range(1,1024),就可以了,考虑到效率问题还可以引入多线程。更多详细操作,可以看【http://www.cnblogs.com/xuanhun/p/5950433.html】。需要提醒一点的是,在没有得到允许情况下,私自对别人的主机进行端口扫描被认为是不友好的挑衅行为。

■  构建tcp客户端发送tcp报文

#!/usr/bin/env python
# coding=utf-8 import socket target_host = "127.0.0.1"
target_port = 1234 #建立一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#链接客户端
client.connect((target_host,target_port)) while True:
data = raw_input('> ')
client.send(data)
data = client.recv(4096)
if not data:
break
print data

  构造出来的是一个带有字符提示的简单TCP报文发送器。代码很简单,不多说了。

■  构建tcp服务端

#! /usr/bin/env python
#coding=utf-8 import socket
bind_ip = ""
bind_port = 9999 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((bind_ip,bind_port)) server.listen(5)
try:
while True:
client,add = server.accept()
print "[*]你监听的是:%s:%d" % (add[0],add[1])
while True:
data = client.recv(1024)
if not data:
break
print data
data = raw_input('> ')
client.send(data)
else:
client.close()
except Exception as e:
print e
server.close()

■  构建UDP服务端

# -*- coding: utf-8 -*-
from socket import *
from time import ctime HOST = '' #主机名
PORT = 21567 #端口号
BUFSIZE = 1024 #缓冲区大小1K
ADDR = (HOST,PORT) udpSerSock = socket(AF_INET, SOCK_DGRAM)
udpSerSock.bind(ADDR) #绑定地址到套接字 while True: #无限循环等待连接到来
try:
print 'Waiting for message ....'
data, addr = udpSerSock.recvfrom(BUFSIZE) #接受UDP
print 'Get client msg is: ', data
udpSerSock.sendto('[%s] %s' %(ctime(),data), addr) #发送UDP
print 'Received from and returned to: ',addr except Exception,e:
print 'Error: ',e
udpSerSock.close() #关闭服务器

■  构建UDP客户端

# -*- coding: utf-8 -*-
from socket import * HOST = 'localhost' #主机名
PORT = 21567 #端口号 与服务器一致
BUFSIZE = 1024 #缓冲区大小1K
ADDR = (HOST,PORT) udpCliSock = socket(AF_INET, SOCK_DGRAM) while True: #无限循环等待连接到来
try:
data = raw_input('>')
if not data:
break
udpCliSock.sendto(data, ADDR) #发送数据
data,ADDR = udpCliSock.recvfrom(BUFSIZE) #接受数据
if not data:
break
print 'Server : ', data except Exception,e:
print 'Error: ',e udpCliSock.close() #关闭客户端

【Python】socket模块应用的更多相关文章

  1. python——socket模块与列表映射

    从socket模块学习中的一段奇怪代码说起 前言:在学习python标准库中的Socket模块中,发现了一段奇怪的代码. import socket def get_constants(prefix) ...

  2. python - socket模块1

    1.使用生活中的接打电话,解释socket通信流程  2.根据上图,写出socket通信的伪代码 2.1.server端伪代码 #买手机   #买手机卡 #开机 #等待电话 #收消息 #发消息 #挂电 ...

  3. python --- socket模块详解

    socket常用功能函数: socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)                  ...

  4. 用python socket模块实现简单的文件下载

    server端: # ftp server端 import socket, os, time server = socket.socket() server.bind(("localhost ...

  5. 项目: 基于Python socket模块实现的简单 ftp 项目:

    需要 自己创建一个 info 文件 用来存储用户信息 服务器: import socket import pickle import struct import os import time ''.s ...

  6. Python socket 基础(Server) - Foundations of Python Socket

    Python socket 基础 Server - Foundations of Python Socket 通过 python socket 模块建立一个提供 TCP 链接服务的 server 可分 ...

  7. Python中的socket 模块

    Python 提供了两个基本的 socket 模块.第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务 ...

  8. Python网络编程(2)——socket模块(2)

    目录: 1. 异常 2. 地址族 3. 套接字类型 4. 模块方法 5. Socket对象与实例方法 socket模块提供了Python中的低层网络连接接口,用于操作套接字操作. 异常 socket模 ...

  9. 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具

    老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...

  10. python实战第一天-socket模块练习

    操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 导入socket模块 ...

随机推荐

  1. SQL HAVING 子句使用

    HAVING 对由sum或其它集合函数运算结果的输出进行限制. 比如,我们可能只希望看到Store_Information数据表中销售总额超过1500美圆的商店的信息,这时我们就需要使用HAVING从 ...

  2. 前端必备HTTP技能之HTTP请求头响应头中常用字段详解(转)

    作为一名前端开发人员,肯定少不了要和网络打交道,因为要从服务器端拉取数据,从服务端获取数据最常用的方式还是通过HTTP请求.给服务器发请求的时候有请求头,接受服务器响应的时候有响应头,客户端和服务器端 ...

  3. 安卓工作室 android studio 汉化后,报错。 设置界面打不开。Can't find resource for bundle java.util.PropertyResourceBundle, key emmet.bem.class.name.element.separator.label

    安卓工作室 android studio 汉化后,报错. 设置界面打不开. Android studio has been sinified and reported wrong.The setup ...

  4. 洛谷.T22136.最长不下降子序列(01归并排序 分治)

    题目链接 \(Description\) 给定一个长为n的序列,每次可以反转 \([l,r]\) 区间,代价为 \(r-l+1\).要求在\(4*10^6\)代价内使其LIS长度最长,并输出需要操作的 ...

  5. 潭州课堂25班:Ph201805201 爬虫基础 第十三课 cookie (课堂笔记)

    # -*- coding: utf-8 -*- # 斌彬电脑 # @Time : 2018/9/15 0015 4:52 #cookie 是服务器发给浏览器的特殊信息 # 可以理解为一个临时通行证 # ...

  6. 潭州课堂25班:Ph201805201 第十六课 正则 (课堂笔记)

    import re 元字符: . ^ $ * + ? {} \ () # s = 'abcdefg' # s.find('c') # print(s.find('cd')) ## 查找 # b = s ...

  7. docker 安装 nginx

    docker pull nginx docker run -d -p 80:80 -v /opt/nginx/www/:/usr/share/nginx/html/  --name webserver ...

  8. SSH使用自定义私钥进行登录

    ssh -i /root/.ssh/id_rsa root@192.168.1.2 -i指定了私钥文件的路径

  9. ZJUT 地下迷宫 (高斯求期望)

    ShowID=1423">http://cpp.zjut.edu.cn/ShowProblem.aspx?ShowID=1423 设dp[i]表示在i点时到达终点要走的期望步数,那么d ...

  10. VS2010环境下Winpcap配置方法 (转)

    VS2010 配置Winpcap 新建一个项目,GetDevs.cpp.用来测试.测试代码最后有给出. View->Property Manager Debug|Win32 -> Mirc ...