实现多线程端口扫描

该博客介绍了一个实验,要求使用多线程扫描至少5个IP地址,每个地址开启100个线程进行并发扫描。实验环境为Red Hat 9,代码实现了ThreadsPortScan.c,并展示了部分运行结果。程序能够检测到打开的端口并获取对应的服务名,对于未知服务则标记为unkonown。
摘要由CSDN通过智能技术生成
实验要求
  1. 能至少扫描5个IP地址;
  2. 针对每个iP地址,开设100个线程同时对其进行扫描;
  3. 如果端口打开,使用函数getservbyport获取其服务名,在屏幕上打印:IP port servername,如果是未知服务,则屏幕显示:ip port unkonown
实验环境

Red Hat 9

代码

ThreadsPortScan.c

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

void print_usage(char* str)
{
   
	printf("the command %s usage is:\n",str);
	printf("%s Ip_Address min_port max_port\n");
}

typedef struct portInfo{
   
	struct in_addr dest_ip;
	unsigned short int min_port;
	unsigned short int max_port;
}Port;

int scanone(struct sockaddr_in scanip)
{
   
        int sockfd;
        if(-1==(sockfd=socket(AF_INET, SOCK_STREAM, 0)))
        {
   
                perror("error in generate socket\n");
                exit(1);
        }

        int ret = connect(sockfd, (struct sockaddr*)&scanip, 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值