#用于探测报文的主动端,启动2个线程共用一个socket, #一个线程负责发送报文,另1个线程负责接收 #可以考虑把3个链路的主动端,启动6个线程,线程函数共用 #传递的参数不同即可。
#用于探测报文的主动端,启动2个线程共用一个socket,
#一个线程负责发送报文,另1个线程负责接收
#可以考虑把3个链路的主动端,启动6个线程,线程函数共用
#传递的参数不同即可。
#3个本地socket,绑定端口号不同,发送的目的端口号也不同
import threading
import socket
# 定义发送的方法,后期用线程方式调用,方法内部进行循环发送数据
def send_msg(udp_socket, ip, port):
#while True:
msg = 'A'*1024
udp_socket.sendto(msg.encode('gbk'), (ip, port))
# 定义接收的方法,后期用线程方式调用,方法内部进行循环接收数据
def recv_msg(udp_socket):
#while True:
recv_data = udp_socket.recvfrom(1024)
print('received[%s:%s]:%s' % (recv_data[1][0], recv_data[1][1], recv_data[0].decode('gbk')))
def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定端口
local_addr = ('192.168.1.102', 6666)
udp_socket.bind(local_addr)
# 循环接收或发送udp信息
dst_ip = "192.168.1.101"
dst_port = int(30001)
# 创建收和发两个线程
send = threading.Thread(target=send_msg, args=(udp_socket, dst_ip, dst_port))
recv = threading.Thread(target=recv_msg, args=(udp_socket,))
# 启动线程
send.start()
recv.start()
if __name__ == "__main__":
main()
# 这是链路探测被动端的程序,接收到报文后直接转发回去。 # 可以启动3个线程就可以完成被动段回复的所有任务,提供的参数就是, # 监听的ip地址,需要监听的端口 #3个线程的需要监听的ip地址相同,唯一区别的就是端口号
# 这是链路探测被动端的程序,接收到报文后直接转发回去。
# 可以启动3个线程就可以完成被动段回复的所有任务,提供的参数就是,
# 监听的ip地址,需要监听的端口
#3个线程的需要监听的ip地址相同,唯一区别的就是端口号
import threading
import socket
def recvAndSend(local_ip,port):
# 1.创建一个接收报文的udp套接字
udp_recv_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 1.创建一个udp转发套接字
udp_send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.绑定本地的相关信息,如果一个网络程序不绑定,则系统会随机分配
# 30000 表示本地的端口 ip一般不用写
local_addr = (local_ip, port)
udp_recv_socket.bind(local_addr)
while True:
# 3. 等待接收对方发送的数据
recv_data = udp_recv_socket.recvfrom(1024)
# 1024表示本次接收的最大字节数
# 6. 显示对方发送的数据
# 接收到的数据recv_data是一个元组
# 第1个元素是对方发送的数据
# 第2个元素是对方的ip和端口
print(recv_data[0].decode('gbk'))
print(recv_data[1])
# 2.准备接收方的地址
# 192.168.65.149 表示目的地ip
# 30000 表示目的地端口
udp_send_socket.sendto(recv_data[0], recv_data[1])
def main():
local_ip="192.168.1.101"
port_1=int(30001)
port_2=int(30002)
port_3=int(30003)
thread_1=threading.Thread(target=recvAndSend,args=(local_ip,port_1))
thread_2=threading.Thread(target=recvAndSend,args=(local_ip,port_2))
thread_3=threading.Thread(target=recvAndSend,args=(local_ip,port_3))
thread_1.start()
thread_2.start()
thread_3.start()
if __name__ == "__main__":
main()
|