多线程端口扫描程序

本文介绍了一个多线程端口扫描程序的设计,它能够扫描5个IP地址,每个地址使用100个线程并发扫描。当端口开放时,程序会通过getservbyport函数获取服务名并显示;若服务未知,则标记为unkonown。在实现过程中,特别注意了参数传递的正确性,避免了因地址复制导致的数据变化问题。
摘要由CSDN通过智能技术生成

要求

实现一个多线程端口扫描程序:
要求:
1、能至少扫描5个IP地址;
2、针对每个iP地址,开设100个线程同时对其进行扫描;
3、如果端口打开,使用函数getservbyport获取其服务名,在屏幕上打印:IP port servername,如果是未知服务,则屏幕显示:ip port unkonown

注意点

  1. 注意各种参数传递的类型
  2. arg是一个地址,将arg地址复制到&port的时候,arg地址的数据已经被改变了。
    memcpy( &port, arg, sizeof(struct port_segment) );
    解决方法:创建100个线程就创建100个传过来的参数,每个线程传递不同的参数地址

代码


#include<stdlib.h>
#include<stdio.h>
#include<sys/socket.h>
#include<netdb.h>
#include<string.h>
#include<unistd.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <printf.h>
#include <sys/wait.h>
#include <sys/types.h>

#define THREAD_NUM 100

void print_usage(char * cmd)
{
   
	fprintf(stderr," %s usage:\n",cmd);
	fprintf(stderr,"%s IP_Addr \n",cmd);
}

typedef struct port_segment {
   
    struct in_addr dest;
    unsigned int min_port;
    unsigned int max_port;
} port_segment;


int is_connect(int port, in_addr_t addr)
{
   
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值