今天实现了几个小程序。
首先是TCP客户端,client.recv中的参数是最大接收的数量,单位我觉得是B吧,搜到的教程里面都没明确指出,sigh。贴上代码:
import sockettarget_host = '0.0.0.0'
target_port = 9998##建立一个socket对象client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#AF_INET参数表明使用标准的IPV4地址或者主机名,SOCKET_STREAM说明这将是一个TCP客户端#连接客户端
client.connect((target_host,target_port))#发送一些数据
#client.send('GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n')
client.send('AAA')#接受一些数据
response = client.recv(4096)print(response)
接下来是UDP客户端,UDP和TCP的最大不同就是UDP不需要建立连接,直接发送了数据。所以大家看到这里就没有client.connect了。给个链接学习下:
点击打开链接
附上代码:
import sockettarget_host = '127.0.0.1'
target_port = 80#建立socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#发送一些数据
client.sendto('AAA',(target_host,target_port))#接收一些数据
data,addr = client.recvfrom(4096)print(data)
接下来是TCP服务器,这中间的心得我有这么几点,可能存在不当之处。
1.server这个socket处在listen的状态时我们不能利用它进行send,我尝试在handle_client函数中先global了它然后用它send,总是报错。##2017.6.23补充一下,这里是因为TCP是点对点所以accept总是新建一个套接字
2.server.accept这个函数没有收到消息时应该是使得整个循环处在暂停的状态。
在kali中实现了服务器和客户端的响应,很有趣。
附上代码:
# -*- coding:utf-8 -*-
import socket
import threadingbind_ip = '0.0.0.0'
bind_port = 9998server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((bind_ip,bind_port)) #将套接字绑定到地址server.listen(5) #开始监听TCP传入连接,参数为操作系统能挂起的最大的连接数量print('[*] listening on %s:%d'%(bind_ip,bind_port))#客户处理线程def handle_client(client_socket):#client_socket即为accept时产生的那个socket#打印出客户端发送到得到内容request = client_socket.recv(1024)print('[*] Received: %s'% request)#返回一个数据包client_socket.send('ACK!')#经实验不能用server来发送,具体原因暂时不明白client_socket.close()while True:client,addr = server.accept() #循环中此处若没有接收到来自客户端的内容应该会停在此处print('[*] Accepted connection from:%s:%d'%(addr[0],addr[1]))#挂起客户端线程,处理传入数据client_handler = threading.Thread(target = handle_client,args = (client,))client_handler.start()
接下来学习netcat,瑞士军刀!急不可耐哈哈