linux下端口扫描的实现(TCP connect、TCP SYN、TCP FIN、UDP四种方式)2整体架构篇

本文介绍了在Linux环境下使用C语言实现TCP连接(connect)、TCP SYN、TCP FIN和UDP四种方式的端口扫描。程序通过线程和函数数组进行组织,主线程挂起等待扫描线程结束,扫描结果存储在全局队列中。每个扫描线程使用线程池,针对每个端口创建单独线程。在开始扫描前,获取本机IP地址作为参数。文章还涉及数据结构设计及ping函数获取IP的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.概述

该程序在linux下用c语言实现TCP的三种端口扫描方式(connect、SYN、FIN)和UDP端口扫描;我用一个函数数组存放四个实现函数,根据选择的端口扫描方式,在创建线程的时候选择不同的函数来执行,主线程挂起等待扫描线程结束,最后打印开放的端口。我用一个全局的队列来存放存在的指针,链表实现。除了connect方式,其它的方式需要知道源主机的ip,因此在创建扫描线程之前,先获得本机的ip地址,作为参数传给扫描线程。

每个扫描线程(tcpXXXScanPort)会建立一个线程池,对每个要扫描的端口都创建一个线程tcpXXXScanEach(线程配置成detach属性),具体的实现每种方式有些差别,后几篇会讲到。

二.实现过程

1.数据结构

    由于调用线程只能传递一个参数,所以我把要传递的信息放在一个数据结构里面,用指针传给子线程。以下是自己定义的要传递的数据结构和全局变量。

#include "mysock.h"
#include "ping.h"
#include "tcpConScan.h"
#include "tcpSynScan.h"
#include "tcpFinScan.h"
#include "udpIcmpScan.h"
int main(int argc, char *argv[])
{
	char destIPStr[] = "192.168.1.21";
	char port1Str[] = "4000";//扫描的初始端口
	char port2Str[] = "4010";//扫描的结束端口
	int cmd;
	struct ScanSock s;
	cmd = 4;//扫描方式
	s.portStart = atoi(port1Str);
	s.portEnd = atoi(port2Str);
	strncpy(s.destIP, destIPStr, sizeof(destI
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值