parent
							
								
									1bb9d8771e
								
							
						
					
					
						commit
						9f071eb5a0
					
				@ -0,0 +1,66 @@
 | 
				
			||||
from socket import *
 | 
				
			||||
from base64 import *
 | 
				
			||||
 | 
				
			||||
mailfrom = "mail from:2@test.com\r\n"
 | 
				
			||||
rcptto = "rcpt to:1@test.com\r\n"
 | 
				
			||||
data = "data\r\n"
 | 
				
			||||
quitmsg = "quit\r\n"
 | 
				
			||||
 | 
				
			||||
msg = "\r\n I love computer networks!"
 | 
				
			||||
endmsg = "\r\n.\r\n"
 | 
				
			||||
#此处使用易邮邮件服务器软件搭建了一个内网邮件服务器
 | 
				
			||||
mailserver = '10.130.82.62'
 | 
				
			||||
mailport = 25
 | 
				
			||||
connectaddress = (mailserver, mailport)
 | 
				
			||||
# Create socket called clientSocket and establish a TCP connection with mailserver
 | 
				
			||||
clientSocket = socket(AF_INET, SOCK_STREAM)
 | 
				
			||||
clientSocket.connect(connectaddress)
 | 
				
			||||
 | 
				
			||||
recv = clientSocket.recv(1024)
 | 
				
			||||
print (recv)
 | 
				
			||||
if recv[:3] != '220':
 | 
				
			||||
    print ('220 reply not received from server.')
 | 
				
			||||
# Send HELO command and print server response.
 | 
				
			||||
heloCommand = 'HELO Alice\r\n'
 | 
				
			||||
clientSocket.send(bytes(heloCommand.encode()))
 | 
				
			||||
recv1 = clientSocket.recv(1024)
 | 
				
			||||
print (recv1.decode())
 | 
				
			||||
if recv1[:3] != '250':
 | 
				
			||||
    print ('250 reply not received from server.')
 | 
				
			||||
 | 
				
			||||
#print('000000000000000')
 | 
				
			||||
#从命令和打印服务器响应发送邮件。
 | 
				
			||||
login = b'auth login\r\n'
 | 
				
			||||
clientSocket.send(login)
 | 
				
			||||
recv2 = clientSocket.recv(1024).decode('utf-8')
 | 
				
			||||
print ('222+',recv2)
 | 
				
			||||
 | 
				
			||||
userCommand = b64encode('2@test.com'.encode('utf-8'))
 | 
				
			||||
clientSocket.send((str(userCommand,encoding='utf-8')+'\r\n').encode())
 | 
				
			||||
recv3 = clientSocket.recv(1024).decode('utf-8')
 | 
				
			||||
print ('333+',recv3)
 | 
				
			||||
 | 
				
			||||
password = b64encode('2'.encode('utf-8'))
 | 
				
			||||
clientSocket.send((str(password,encoding='utf-8')+'\r\n').encode())
 | 
				
			||||
recv4 = clientSocket.recv(1024).decode('utf-8')
 | 
				
			||||
print ('444+',recv4)
 | 
				
			||||
 | 
				
			||||
#print('0000000000000000')
 | 
				
			||||
 | 
				
			||||
clientSocket.send(bytes(mailfrom.encode()))
 | 
				
			||||
check = clientSocket.recv(1024)
 | 
				
			||||
print(check)
 | 
				
			||||
clientSocket.send(bytes(rcptto.encode()))#将RCPT发送到命令和打印服务器响应。
 | 
				
			||||
check1 = clientSocket.recv(1024)
 | 
				
			||||
print(check1)
 | 
				
			||||
clientSocket.send(bytes(data.encode()))#发送数据命令和打印服务器响应。
 | 
				
			||||
check2 = clientSocket.recv(1024)
 | 
				
			||||
print(check2)
 | 
				
			||||
clientSocket.send(bytes((mailfrom+msg+endmsg).encode()))#发送消息数据。
 | 
				
			||||
check3 = clientSocket.recv(1024)
 | 
				
			||||
print(check3)
 | 
				
			||||
#发送退出命令并获得服务器响应。
 | 
				
			||||
clientSocket.send(bytes(quitmsg.encode()))
 | 
				
			||||
check4 = clientSocket.recv(1024)
 | 
				
			||||
print(check4)
 | 
				
			||||
clientSocket.close()
 | 
				
			||||
@ -0,0 +1,19 @@
 | 
				
			||||
from socket import *
 | 
				
			||||
import time
 | 
				
			||||
serverName = 'localhost'
 | 
				
			||||
serverPort = 12000
 | 
				
			||||
clientSocket = socket(AF_INET, SOCK_DGRAM)
 | 
				
			||||
clientSocket.settimeout(1)
 | 
				
			||||
 | 
				
			||||
for i in range(0, 10):
 | 
				
			||||
	sendTime = time.time()
 | 
				
			||||
	message = ('Ping %d %s' % (i + 1, sendTime)).encode()
 | 
				
			||||
	try:
 | 
				
			||||
		clientSocket.sendto(message, (serverName, serverPort))
 | 
				
			||||
		modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
 | 
				
			||||
		rtt = time.time() - sendTime
 | 
				
			||||
		print('Sequence %d: Reply from %s  RTT = %.3fs' % (i + 1, serverName, rtt))
 | 
				
			||||
	except Exception as e:
 | 
				
			||||
		print('Sequence %d: Request timed out' % (i + 1))
 | 
				
			||||
 | 
				
			||||
clientSocket.close()
 | 
				
			||||
@ -0,0 +1,11 @@
 | 
				
			||||
import random
 | 
				
			||||
from socket import *
 | 
				
			||||
serverSocket = socket(AF_INET, SOCK_DGRAM)
 | 
				
			||||
serverSocket.bind(('', 12000))
 | 
				
			||||
while True:
 | 
				
			||||
	rand = random.randint(0, 10)
 | 
				
			||||
	message, address = serverSocket.recvfrom(1024)
 | 
				
			||||
	message = message.upper()
 | 
				
			||||
	if (rand < 4):
 | 
				
			||||
		continue
 | 
				
			||||
	serverSocket.sendto(message, address)
 | 
				
			||||
@ -0,0 +1,62 @@
 | 
				
			||||
# Import socket module
 | 
				
			||||
from socket import * 
 | 
				
			||||
import sys # In order to terminate the program
 | 
				
			||||
 | 
				
			||||
# Create a TCP server socket
 | 
				
			||||
#(AF_INET is used for IPv4 protocols)
 | 
				
			||||
#(SOCK_STREAM is used for TCP)
 | 
				
			||||
 | 
				
			||||
serverSocket = socket(AF_INET, SOCK_STREAM)
 | 
				
			||||
 | 
				
			||||
# Assign a port number
 | 
				
			||||
serverPort = 80
 | 
				
			||||
 | 
				
			||||
# Bind the socket to server address and server port
 | 
				
			||||
serverSocket.bind(("", serverPort))
 | 
				
			||||
 | 
				
			||||
# Listen to at most 1 connection at a time
 | 
				
			||||
serverSocket.listen(1)
 | 
				
			||||
 | 
				
			||||
# Server should be up and running and listening to the incoming connections
 | 
				
			||||
 | 
				
			||||
while True:
 | 
				
			||||
	print('The server is ready to receive')
 | 
				
			||||
 | 
				
			||||
	# Set up a new connection from the client
 | 
				
			||||
	connectionSocket, addr = serverSocket.accept()
 | 
				
			||||
 | 
				
			||||
	# If an exception occurs during the execution of try clause
 | 
				
			||||
	# the rest of the clause is skipped
 | 
				
			||||
	# If the exception type matches the word after except
 | 
				
			||||
	# the except clause is executed
 | 
				
			||||
	try:
 | 
				
			||||
		# Receives the request message from the client
 | 
				
			||||
		message = connectionSocket.recv(1024).decode()
 | 
				
			||||
		# Extract the path of the requested object from the message
 | 
				
			||||
		# The path is the second part of HTTP header, identified by [1]
 | 
				
			||||
		filename = message.split()[1]
 | 
				
			||||
		# Because the extracted path of the HTTP request includes 
 | 
				
			||||
		# a character '\', we read the path from the second character 
 | 
				
			||||
		f = open(filename[1:])
 | 
				
			||||
		# Store the entire contenet of the requested file in a temporary buffer
 | 
				
			||||
		outputdata = f.read()
 | 
				
			||||
		# Send the HTTP response header line to the connection socket
 | 
				
			||||
		connectionSocket.send("HTTP/1.1 200 OK\r\n\r\n".encode()) 
 | 
				
			||||
 
 | 
				
			||||
		# Send the content of the requested file to the connection socket
 | 
				
			||||
		for i in range(0, len(outputdata)):  
 | 
				
			||||
			connectionSocket.send(outputdata[i].encode())
 | 
				
			||||
		connectionSocket.send("\r\n".encode()) 
 | 
				
			||||
		
 | 
				
			||||
		# Close the client connection socket
 | 
				
			||||
		connectionSocket.close()
 | 
				
			||||
 | 
				
			||||
	except IOError:
 | 
				
			||||
			# Send HTTP response message for file not found
 | 
				
			||||
			connectionSocket.send("HTTP/1.1 404 Not Found\r\n\r\n".encode())
 | 
				
			||||
			connectionSocket.send("<html><head></head><body><h1>404 Not Found</h1></body></html>\r\n".encode())
 | 
				
			||||
			# Close the client connection socket
 | 
				
			||||
			connectionSocket.close()
 | 
				
			||||
 | 
				
			||||
serverSocket.close()  
 | 
				
			||||
sys.exit()#Terminate the program after sending the corresponding data
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue