Socket

来源:互联网 发布:字符串大小写转换c语言 编辑:程序博客网 时间:2024/06/05 11:16

socket(简称 套接字) 是进程间通信的一种方式,实现不同主机间的进程间通信,比如QQ

socket.socket(AddressFamily, Type)

Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET
Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议)

UDP发送数据

from socket import *udpSocket = socket(AF_INET, SOCK_DGRAM)# 创建套接字sendAddr = ('192.168.1.1', 8080)# 发送到的ip和端口sendData = "hello" # 发送的内容udpSocket.sendto(sendData, sendAddr) #发送udpSocket.close() # 关闭套接字

UDP接收数据

from socket import *udpSocket = socket(AF_INET, SOCK_DGRAM)# 创建套接字bindAddr = ('', 7788)# 绑定本机的端口,ip地址为空表示本机的任何一个ipudpSocket.bind(bindAddr)#绑定本机的端口recvData = udpSocket.recvfrom(1024)# 等待接收的数据,1024表示本次接收的最大字节数print(recvData)udpSocket.close()# 关闭套接字

udp广播

import socket, sysdest = ('<broadcast>', 7788)# 这里<broadcst>可以写成当前网段的广播地址s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建udp套接字s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1)# 设置成能发送广播数据s.sendto("Hi", dest)# 发送广播

TCP:传输控制协议,稳定,慢一些,web服务器(HTTP)使用tcp
UDP:用户数据包协议,不稳定,快一些
TCP三次握手,四次挥手
TCP十种状态
TTL是指经过路由器的个数
MSL数据包在网络上存活的最长时间

TCP服务端

1.socket创建一个套接字
2.bind绑定ip和port
3.listen使套接字变为监听状态
4.accept等待客户端的信息
5.recv/send接收发送数据

from socket import *tcpSerSocket = socket(AF_INET, SOCK_STREAM) # 创建TCPsocketaddress = ('', 7788) #绑定本地的ip和端口tcpSerSocket.bind(address) tcpSerSocket.listen(5)# 将socket变为监听状态,listen是建立连接的**队列**的个数,linux之中这个值是默认的,更改无效,阻塞newSocket, clientAddr = tcpSerSocket.accept()#如果有客户端连接,则生成一个专门的套接字进行通讯,阻塞recvData = newSocket.recv(1024) #获得客户端发送过来的消息newSocket.send("thank you !")# 向客户端发送消息newSocket.close() #关闭该客户端的套接字tcpSerSocket.close() #关闭监听的套接字

TCP客户端

from socket import *tcpClientSocket = socket(AF_INET, SOCK_STREAM)# 创建TCP socketserAddr = ('192.168.1.102', 7788)tcpClientSocket.connect(serAddr) #连接服务器tcpClientSocket.send("hello") #向服务器发送消息recvData = tcpClientSocket.recv(1024) # 接收消息tcpClientSocket.close() # 关闭套接字

常见TCP攻击

DDOS SYN洪水攻击
客户端发完SYN,不发ACK
DNS攻击
DNS服务器劫持,换域名对应的IP
arp 中间人攻击

原创粉丝点击