文档章节

一个建议的tcp服务器,可以用来做防火墙端口测试调试

mia0x75
 mia0x75
发布于 2015/12/08 15:20
字数 276
阅读 13
收藏 0

直接上代码,gcc编译即可,带一个参数,即需要侦听的端口号。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MAXLINE 4096 /*max text line length*/
#define LISTENQ 8    /*maximum number of client connections*/

void main(int argc, char *argv[])
{
	int sockfd, portno, connfd, n;
	socklen_t clilen;
	char buf[MAXLINE];
	struct sockaddr_in cliaddr, servaddr;
	
	if (argc < 2) {
		fprintf(stderr, "[ERROR] no port number provided, usage: po portno\n");
		exit(1);
	}
	portno = atoi(argv[1]);
	
	//creation of the socket
	sockfd = socket (AF_INET, SOCK_STREAM, 0);
	if (sockfd < 0) {
		fprintf(stderr, "[ERROR] failed on opening socket\n");
		exit(1);
	}
	
	//preparation of the socket address
	servaddr.sin_family = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port = htons(portno);
	
	if (bind(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
		fprintf(stderr, "[ERROR] failed on binding\n");
		exit(1);
	}
	
	listen(sockfd, LISTENQ);
	
	printf("%s\n","[INFO] server running, waiting for connections...");
	
	for ( ; ; ) {
		clilen = sizeof(cliaddr);
		connfd = accept(sockfd, (struct sockaddr *) &cliaddr, &clilen);
		if (connfd < 0) {
			fprintf(stderr, "[ERROR] failed on accept\n");
		}
		else {
			printf("%s\n","[INFO] received request...\n");
			
			while ((n = recv(connfd, buf, MAXLINE,0)) > 0) {
				printf("%s","[INFO] string received from and resent to the client:\n");
				puts(buf);
				send(connfd, buf, n, 0);
			}
			
			if (n < 0) {
				fprintf(stderr, "[ERROR] failed on read\n");
				exit(1);
			}
			close(connfd);
		}
	}
	
	//close listening socket
	close(sockfd);
}


代码来源于Google搜索,做了一些修改和调整。

© 著作权归作者所有

mia0x75
粉丝 10
博文 32
码字总数 25207
作品 0
东城
私信 提问
docker 容器无法连接外网

Q:docker run -itd --name=NAME --net host IMAGE bash 启动容器后,容器中无法连接外网 A:进入容器 docker exec -ti [NAMES] /bin/bash 设置防火墙 使用命令iptables -n -L 可以查看当前防...

Jack088
01/31
283
0
域网络中勒索病毒或其他网络传播类病毒紧急应对简明指导

如果你是域网络,由于域可以集中分发策略,可按下面的方法快速响应,主要思想是尽快关闭可能感染的通道,然后再尽快更新补丁以根本解决。 当然,如果你没有域网络,这个这个,那就赶快部署吧...

ultradream
2017/05/17
0
0
防止黑客扫描ssh端口 修改端口号——超详细

为什么要修改ssh端口? 答:ssh默认端口为22,容易被黑客扫描登陆,对服务器造成不安全的影响。 修改默认端口的方法: ssh配置文件: /etc/ssh/sshd_config vim /etc/ssh/sshd_config Port 22...

帅小欣
2017/05/11
0
0
NFSv3 NFSv3针对防火墙端口开通策略 生产环境实践

针对NFSv4版本需要服务官方说明: NFS version 4 (NFSv4) works throughfirewalls and on the Internet, no longer requires an rpcbind service, supportsACLs, and utilizes stateful ope......

盖世英雄iii
2018/06/27
0
0
Linux源进源出与iproute2

最近在给客户做解决方案的时候遇到这么一个场景也给自己埋了个坑这里记录一下。 具体需求如下 现在客户国内服务器和国外的防火墙已经内网打通 客户在国内有台WEB服务器要通过国外的一台防火墙...

Jx战壕
2017/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Tensorflow 2.0安装

Tensorflow2.0安装环境: Ubuntu 16.04或更高(64位) Windows 7或者更高(64位,且支持python3) 安装Tensorflow 2.0 GPU版本的需要安装NVIDIA相关软件包: NVIDIA驱动 :版本必须410.x或更...

JosiahMg
12分钟前
2
0
TL138/1808/6748F-EasyEVM开发板硬件、CPU、FLASH、RAM

TL138/1808/6748F-EasyEVM是广州创龙基于SOM-TL138/SOM-TL1808/SOM-TL6748F核心板开发的一款开发板。由于SOM-TL138/SOM-TL1808/SOM-TL6748核心板管脚兼容,所以此三个核心板共用同一个底板。...

Tronlong创龙
19分钟前
2
0
百度嵌入式AI解决方案EdgeBoard之内存驱动设计介绍

1. 背景介绍 由于 FPGA 具备可编程和高性能计算的特点,基于FPGA硬件的AI计算加速,正广泛地应用到计算机视觉处理领域。其中极具代表性的部署方式之一就是使用FPGA和CPU组合构成异构计算系统...

AI君
25分钟前
5
0
开放应用模型(OAM):全球首个云原生应用标准定义与架构模型

Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长。但同时我们也关注到,Kubernetes 的核心 API 资源比如 Service、Deploymen...

Mr_zebra
29分钟前
2
0
《Linux操作系统-Exynos4412》编译和安装Busybox

开发环境:Exynos4412-iTOP-4412开发板 现在 Busybox 的配置已经完成了,接下来开始编译 Busybox,在 Ubuntu 的终端输入 “make”命令开始编译 Busybox,如下图。 下图为编译过程中的截图。 ...

书白
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部