#coding:utf-8
__author__ = 'similarface'
#!/usr/bin/env python import socket
#二进制和ASCII互转及其它进制转换
from binascii import hexlify
def get_remote_machine_info(remote_host):
'''
获取根据域名获取IP地址
:param remote_host: 域名
:return:IP地址
'''
try:
#SimilarFacedeMacBook-Pro:~ similarface$ ping www.python.org
#PING python.map.fastly.net (103.245.222.223): 56 data bytes
print("%s的IP地址:%s" %(remote_host,socket.gethostbyname(remote_host)))
except socket.error,err_msg:
print("%s: %s" %(remote_host,err_msg)) def convert_ip4_address():
'''
转化IP地址
'''
for ip_addr in ['127.0.0.1','192.168.0.1']:
#IP地址转换为一个32位的网络序列IP地址。
packed_ip_addr=socket.inet_aton(ip_addr)
#将一个十进制网络字节序转换为点分十进制IP格式的字符串。
unpacked_ip_addr=socket.inet_ntoa(packed_ip_addr)
print "IP地址: %s => 打包: %s, 非打包: %s" %(ip_addr, hexlify(packed_ip_addr), unpacked_ip_addr) def find_service_name():
'''
根据端口获取服务的名称
:return:
'''
protocolname='tcp'
for port in range(53,22,80):
try:
print "Port: %s => service name: %s" %(port, socket.getservbyport(port, protocolname))
except Exception,e:
print(e) print "Port: %s => service name: %s" %(53, socket.getservbyport(53, 'udp')) def convert_integer():
'''
#ntohl()是将一个无符号长整形数从网络字节顺序转换为主机字节顺序。
#将主机数转换成无符号长整型的网络字节顺序。本函数将一个32位数从主机字节顺序转换成网络字节顺序。
:return:
'''
data=1234
print "原数据: %s => 长主机字节顺序: %s, 长网络字节顺序: %s"%(data, socket.ntohl(data), socket.htonl(data))
print "原数据: %s => 短主机字节顺序: %s, 短网络字节顺序: %s"%(data, socket.ntohs(data), socket.htons(data)) def test_socket_timeout():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "默认的超时时间: %s" %s.gettimeout()
s.settimeout(100)
print "当前的超时时间: %s" %s.gettimeout() import sys,socket,argparse
def main():
parser=argparse.ArgumentParser(description="Socket 异常处理")
parser.add_argument('--host',action='store',dest='host',required=False)
parser.add_argument('--port',action="store",desc='port',type=int,required=False)
parser.add_argument('--file',action-"store",desc='file',required=False)
given_args=parser.parse_args()
host=given_args.host
port=given_args.port
filename=given_args.file try:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
except socket.error,e:
print("Error creating socket: %s" % e )
sys.exit(1) try:
s.connect((host,port))
except socket.gaierror,e:
print "Address-related error connecting to server: %s" % e
sys.exit(1)
except socket.error,e:
print "Connection error: %s" % e
sys.exit(1) try:
s.sendall("GET %s HTTP/1.0\r\n\r\n" % filename)
except socket.error, e:
print "Error sending data: %s" % e
sys.exit(1) while 1:
try:
buf = s.recv(2048)
except socket.error, e:
print "Error receiving data: %s" % e
sys.exit(1)
if not len(buf):
break
# write the received data
sys.stdout.write(buf) if __name__ == "__main__":
remote_host='www.python.org'
get_remote_machine_info(remote_host)
convert_ip4_address()
print('------find_service_name------')
find_service_name()
print('------convert_integer------')
convert_integer()
print('------main------')
main()
'''
时间服务器客户端
'''
import socket,struct,sys,time
#时间服务器地址
NTP_SERVER='0.asia.pool.ntp.org'
#参考1970的时间
TIME1970=2208988800L
def sntp_client():
#建立socket对象
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#SNTP protocol data
data = '\x1b' + 47 * '\0'
#向时间服务器发送数据
client.sendto(data,(NTP_SERVER,123))
#获取数据和地址
data,address=client.recvfrom(1024)
if data:
print(address)
#
t = struct.unpack( '!12I', data )[10]
#
print(t)
t -= TIME1970
print '\tTime=%s' % time.ctime(t) if __name__=='__main__':
sntp_client()
import socket,sys,argparse
'''
简单的socket客服端
'''
host='localhost'
def echo_client(port):
#建立套结字
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#服务地址
server_address=(host,port)
#连接服务器
sock.connect(server_address)
try:
# Send data
message = "Test message. This will be echoed"
print "Sending %s" % message
sock.sendall(message)
# Look for the response
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = sock.recv(16)
amount_received += len(data)
print "Received: %s" % data
except socket.errno, e:
print "Socket error: %s" %str(e)
except Exception, e:
print "Other exception: %s" %str(e)
finally:
print "Closing connection to the server"
sock.close() '''
简单的接受数据的服务器端
'''
import socket,sys,argparse
host='localhost'
data_payload=2048
backlog=5
def echo_server(port):
""" 简单的打印屏幕服务 """
#TCP协议的套结字
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#是否端口重复使用
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#################
server_address=(host,port)
#绑定IP和端口
sock.bind(server_address)
#监听
sock.listen(backlog)
while True:
#建立连接
client,address=sock.accept()
#获取消息
data=client.recv(data_payload)
if data:
#发送数据
client.send(data)
#结束连接
client.close()

  

  

  

python剑指网络篇一的更多相关文章

  1. python剑指网络篇二

    在socket编程中 AF_INET 对应 IPv4 SOCK_STREAM 对应 TCP SOCK_DGRAM 对应 UDP

  2. python剑指网络

    >>> #获取hostname ... >>> host_name=socket.gethostname() >>> print "%s ...

  3. python剑指offer 链表中环的入口节点

    题目: 一个链表中包含环,请找出该链表的环的入口结点. 思路: 先说个定理:两个指针一个fast.一个slow同时从一个链表的头部出发, fast一次走2步,slow一次走一步,如果该链表有环,两个指 ...

  4. python剑指offer最小的K个数

    题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 使用快排中的partition思想. ①我们设定part ...

  5. python剑指offer数组中出现次数超过一半的数字

    题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...

  6. python剑指offer系列二叉树中和为某一值的路径

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  7. python剑指offer 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def ...

  8. python剑指offer 顺时针打印指针

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...

  9. python剑指offer 实现树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __ ...

随机推荐

  1. ThreadLocal深入理解二

    转载:http://doc00.com/doc/101101jf6 今天在看之前转载的博客:ThreadLocal的内部实现原理.突然有个疑问, 按照threadLocal的原理, 当把一个对象存入到 ...

  2. 如何让其他计算机访问我的计算机上数据库mysql

    第一种:能ping通,说明你们在同一个网络中,可以直接访问.你只要在你的登录用户中的帐号加上可外部访问就可以了...也就是授权.比如你的帐号是root   你可以进入mysql后, 你可以看到,每个帐 ...

  3. Java根据条件删除Map中元素

    今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map<Doubl ...

  4. 2016年12月2日 星期五 --出埃及记 Exodus 20:23

    2016年12月2日 星期五 --出埃及记 Exodus 20:23 Do not make any gods to be alongside me; do not make for yourselv ...

  5. 注册页面的验证 WEB的三级联动

    1.js中window.onload = function () {};表示当页面都加载完了之后才走里面的内容. 2.当函数中遇到return时,会跳出函数,return后面的内容不再继续进行,就是后 ...

  6. java网页抓取

    网页抓取就是,我们想要从别人的网站上得到我们想要的,也算是窃取了,有的网站就对这个网页抓取就做了限制,比如百度 直接进入正题 //要抓取的网页地址 String urlStr = "http ...

  7. raid0,raid1,raid10,raid5,raid50,raid6,raid60的功能总结简述

    1,raid0的特性:采用剥离,数据将在几个磁盘上进行分割.数据被分成很多数据块,每一数据块会被写入不同的磁盘.从而, 每一磁盘的工作负荷都得到了降低,这有助于加速数据传输.RAID-0可让磁盘更好地 ...

  8. An Example of Pre-Query and Post-Query Triggers in Oracle Forms With Using Display_Item to Highlight Dynamically

    Example is given for Pre-Query and Post-Query triggers in Oracle Forms, with using Display_Itembuilt ...

  9. 验证SMB登入

    使用SMB登入扫描器对大量主机的用户名和口令进行猜解,不过扫描动静很大,容易被察觉,而且每一次登入尝试都会被扫描的主机系统日志记录下来,留下痕迹不建议使用. 实例 第一步: msf > use ...

  10. SQL Server 小技巧【2】

    --1.不要使用×来查询所有字段 SELECT * FROM DBO.tb1 --改为 SELECT FName,PWD,CreateDate FROM DBO.tb1 (NOLOCK) --2.查询 ...