Linux C语言 双网卡进行互相的端口转发例程

Linux C语言 双网卡进行互相的端口转发例程,第1张

Linux C语言 双网卡进行互相的端口转发例程

我板卡的双网卡分别是192.168.2.111、192.168.1.111,假设他们分别接收来自192.168.2.2、192.168.1.10的数据。

#include 
#include           
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main(void)
{
	int udp_socket_fd = socket(AF_INET,SOCK_DGRAM,0);
	if(udp_socket_fd < 0)
	{
		printf("create socket failn");
		return -1;
	}
	
	//2.设置UDP的地址并绑定 
	struct sockaddr_in  local_addr = {0};
	local_addr.sin_family  = AF_INET; //使用IPv4协议
	local_addr.sin_port	= htons(161);   //网络通信都使用大端格式
	local_addr.sin_addr.s_addr = INADDR_ANY;//让系统检测本地网卡,自动绑定本地IP
 
	//设置目的IP地址
    struct sockaddr_in dest_addr = {0};
    dest_addr.sin_family = AF_INET;//使用IPv4协议
    dest_addr.sin_port = htons(161);//设置接收方端口号

	int ret = bind(udp_socket_fd,(struct sockaddr*)&local_addr,sizeof(local_addr));
	if(ret < 0)
	{
		perror("bind fail:");
		close(udp_socket_fd);
		return -1;
	}
	
	struct sockaddr_in  src_addr = {0};  //用来存放对方(信息的发送方)的IP地址信息
	int len = sizeof(src_addr);	//地址信息的大小
	char buf[1024] = {0};//消息缓冲区
	
	while(1)
	{
		ret = recvfrom(udp_socket_fd, buf, sizeof(buf), 0, (struct sockaddr *)&src_addr, &len);
		if(ret == -1)
		{
			break;
		}
		printf("[%s:%d]",inet_ntoa(src_addr.sin_addr),ntohs(src_addr.sin_port));//打印消息发送方的ip与端口号
		printf("buf=%sn",buf);
		
		if(strcmp(inet_ntoa(src_addr.sin_addr),"192.168.2.2") == 0)
		{
			dest_addr.sin_addr.s_addr = inet_addr("192.168.1.10"); //设置接收方IP 
			sendto(udp_socket_fd, buf, strlen(buf), 0, (struct sockaddr *)&dest_addr,sizeof(dest_addr));
		}
		if(strcmp(inet_ntoa(src_addr.sin_addr),"192.168.1.10") == 0)
		{
			dest_addr.sin_addr.s_addr = inet_addr("192.168.2.2"); //设置接收方IP 
			sendto(udp_socket_fd, buf, strlen(buf), 0, (struct sockaddr *)&dest_addr,sizeof(dest_addr));
		}
		if(strcmp(buf, "exit") == 0)
		{
			break;
		}
		memset(buf, 0, sizeof(buf));//清空存留消息
 
	}
	close(udp_socket_fd);
	
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4654087.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-06
下一篇2022-11-06

发表评论

登录后才能评论

评论列表(0条)

    保存