14-08-08 考核试题总结~

之前一直在学php,没想到考察的是python。。恶补了一下,幸好上课的时候看了一些基本语法和系统编程、linux里面关于线程的描述,最后还是做出来了。

第一题:Flag经base64编码后,再进行移位加密得到密文:IVUBNJmwAx5Wq29zXTekNyde。移位加密位移量未知。编写脚本得到flag。

很简单的一道题,移位后保存结果,然后用自带的base64模版里的函数直接解码,值得一提的是python中不支持字符(char)类型,所以很多操作较c语言来说还是比较麻烦的(可能是我对python里面字符串了解不多= =),用for遍历,得到每一个字符使用ord()函数取其asc码,加一之后利用chr()函数返回字符。完成移位操作。

以下是代码(python版本是2.7.6):

#usr/bin/env python
"8.6 exam1"
import base64
AIMSTR=‘IVUBNJmwAx5Wq29zXTekNyde‘
FILENAME=‘/home/al/Desktop/res.txt‘
def movword(n,a):
	"single letter"
	temp=ord(a)
	if temp>47 and temp<58:
		return chr(temp)
	i=0
	while i<n:
		temp+=1
		if temp==91:
			temp =65
		if temp==123:
			temp =97
		i+=1
	return chr(temp)

def movstr(n,str):
	"for each word in str mov n forward"
	temp=""
	for ch in str:
		ch=movword(n,ch)
		temp+=ch
	return temp

fileobj=open(FILENAME,"w")
temp=AIMSTR
for i in range(24):
	temp=movstr(1,temp)
	temp2=base64.b64decode(temp)
	print temp2
	fileobj.writelines(‘%s\n‘%temp2)
fileobj.close()
print ‘Done!‘

第二题: 设计一个线程池控制的端口扫描器,要求用socket connect方法即可。指定端口后开启线程池调度,扫描结束后将结果放入消息队列中,开启打印线程打印消息。要求扫描和打印是并行的。

关于多线程编程和消息队列的实现已在上一篇博文中讲过,这里不做赘述,主要总结下web编程,也就是socket模版和套接字的使用问题。

这里主要叙述如何建立一个TCP服务器。

首先创建一个socket对象,创建时第一个参数是套接字类型,这里我们使用AF_INET,是一种基于网络的套接字。        再使用bind()内建函数绑定套接字的地址,其中地址由主机和端口组成HOST设为空表示可以绑定在所有有效地址上,端口选一个未被占用的就行了。

之后这个socket对象就会一直监听这个端口传来的数据,使用内建的recv()可以被动接受传来的数据,并且可以将其保存在一个变量之中,或者直接放入消息列表。

接下来就只需要一直让这个recv()函数一直处于活动状态不停监听传来的数据就行了。

关于收到的数据放入消息队列q,然后reader()函数所在线程读取q中的消息,强调一下要给reader()中q.get()函数中加上非零的参数block,使得在队列中没有消息的时候能挂起而不是一直输出空格。

代码如下:

from socket import *
from time import *
from threading import Thread
from Queue import Queue

HOST=‘‘
PORT=9011
BUFSIZ=1024
ADDR=(HOST,PORT)

#the attribute of socket

def listener(queue):

	tcp=socket(AF_INET,SOCK_STREAM)
	tcp.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
	tcp.bind(ADDR)
	tcp.listen(0)

	print ‘waiting for connection....‘
	tcp,addr=tcp.accept()
	print ‘...connected from:‘,addr
	while True :
		data = tcp.recv(BUFSIZ)
		if not data:
			break
		queue.put(‘[%s] %s‘%(ctime(),data),1)
		#print ‘[%s] %s‘%(ctime(),data)
	tcp.close()

def reader(queue):
	while True:
		data=queue.get(1)
		print data

funcs=[listener,reader]
nfuncs=range(len(funcs))
threads=[]
q=Queue(32)

for i in nfuncs:
	t=Thread(target=funcs[i],args=(q,))
	threads.append(t)
for i in nfuncs:
	threads[i].start()
for i in nfuncs:
	threads[i].join()
	

最后说一下编写代码过程中遇到的问题。

一是如果过早的关闭了套接字对象,那么在调用recv()函数的时候会产生一个没有写权限的错误。

二是args的类型一定要是一个元组,当元组里面只有一个元素的时候似乎会出错,不过在后面加上逗号就好了。

14-08-08 考核试题总结~,布布扣,bubuko.com

时间: 2024-08-09 10:42:38

14-08-08 考核试题总结~的相关文章

2014/08/08 – Backbonejs

[来自: Backbone.js 开发秘笈 第5章] Event API: (function ($) { //define ------------------------- var obj = {}; var obj2 = { commonEvent: function () { window.document.title = new Date().toString(); } }; //扩展对象包含事件 _.extend(obj, Backbone.Events); _.extend(obj

一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

跳槽不算频繁,但参加过不少面试(电话面试.face to face 面试),面过大 / 小公司.互联网 / 传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实.追本溯源.持续改进的习惯,特此将自己经历过.构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中. 1. synchronized 和 reentrantlock 异同 相同点 都实现了多线程同步和内存可见性语义 都

(转)大厂常问到的14个Java面试题

1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Monitor对象实现 reentrantlock通过CAS.ASQ(AbstractQueuedSynchronizer)和locksupport(用于阻塞和解除阻塞)实现 synchronized依赖jvm内存模型保证包含共享变量的多线程内存可见性 reentrantlock通过ASQ的volatil

Linux 第14天: (08月25日) Linux磁盘管理

本章内容磁盘结构分区类型管理分区管理文件系统挂载设备管理虚拟内存 设备文件I/O Ports: I/O设备地址一切皆文件:open(), read(), write(), close()设备类型:块设备:block,存取单位"块",磁盘字符设备:char,存取单位"字符",键盘设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信设备号码:主设备号:major number, 标识设备类型次设备号:minor number, 标识同一类型下的不同设备

Linux 第14天: (08月25日) 练习和作业

1.创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testdir目录,且默认有acl挂载选项 2.写一个脚本,完成如下功能:(1) 列出当前系统识别到的所有磁盘设备(2) 如磁盘数量为1,则显示其空间使用信息否则,则显示最后一个磁盘上的空间使用信息

08: 算法面试题2

1.1 python实现栈在 O(1) 时间内求 min 1.题目说明 1. python的栈是用list实现的,只要将list的append和pop封装到stack类中,即实现了压栈和退栈. 2. 可以考虑利用两个栈来实现,一个栈保存所有数据,另一个保存对应状态下的最小值. 3. 当新压栈的元素小于等于栈内最小的元素时,将新元素压入min_list,min_list栈顶元素即为所求. 举例:依次压栈3,2,4,1: stack_list = [3, 2, 4, 1] min_list = [3

关于斐波那契数列的一点规律 --14年蓝桥杯试题

问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 .... (x=1,2) f(x) = f(x-1) + f(x-2) .... (x>2) 对于给定的整数 n 和 m,我们希望求出: f(1) + f(2) + ... + f(n) 的值.但这个值可能非常大,所以我们把它对 f(m) 取模. 公式如下 但这个数字依然很大,所以需要再对 p 求模. 输入格式 输入为一行用空格分开的整数 n m p (0 < n, m, p < 10^18) 输出格式 输出为1个整数

一线互联网常见的14个Java面试题,你颤抖了吗程序员

跳槽不算频繁,但参加过不少面试(电话面试.face to face面试),面过大/小公司.互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实.追本溯源.持续改进的习惯,特此将自己经历过.构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义都是可重入锁不同点 实现机

2017/08/08 工作日志

上午差不多都在解决类库的引用问题,最后还是用不引用解决的... 下午差不多可以开始静下心做任务的时候测试说上次提交的需求有bug...来回折腾了一会还是先去做当前的项目了. 下班之后开始解决上次的bug,差不多整整两个半小时,内心由焦急到平静反复循环,差不多八点半一举解决. 改bug与添加新功能的感觉如此不同,后者是包装礼物,最核心的完成后放在里面,剩下的依自己的心意不断添加新的包装, 而改bug是一层层地抽丝剥茧,线条凌乱复杂,往往又时间紧迫,令人焦急万分,但到找到症结所在,一举解决问题的刹那