热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

初学者问题~为什么这段程序出错了~~问题取消!

初学者问题~为什么这段程序出错了~~问题取消!--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
[i=s] 本帖最后由 lang1437 于 2009-3-21 20:57 编辑

下面这段程序是我按照书在Emacs上打的一段端口扫描程序 可编译总是出错~ 后来我在VC++里编译了一下提示说
fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
没有头文件吗??为什么呀?怎么改就对了!是不是书上错了!还是我忽略了某个步骤!

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

//定义一个端口区间信息
typedef struct _port_segment
{struct in_addr dest_ip;//目标IP
unsigned short int min_port;//起始端口
unsigned short int max_port;//最大端口
}port_segment;
/*自定义的错误处理函数*/
void my_err(const char * err_string,int line)
{fprintf(stderr,"line:%d",line);
perror(err_string);
exit(1);
}
/*
*描述:扫描某一IP地址上的某一端口的函数
*返回值:-1 出错
* 0 目标端口未打开
* 1 目标端口已打开
*/
int do_scan (struct sockaddr_in serv_addr)
{ int conn_fd;
int ret;
// 创建一个TCP套接字
conn_fd=socket(AF_INET,SOCK_STREAM,0);
if (conn_fd<0)
{my_err("socket",_LINE_);}
//向服务器端发送连接请求
if ((ret=connect(conn_fd,(struct sockaddr *)&serv_addr,sizeof (struct sockaddr)))<0)
{if (errno==ECONNREFUSED)
{//目标端口未打开
close(conn_fd);
return 0;
}
else
{//其他错误
close (conn_fd);
return -1;
}
}
else if (ret==0)
{ printf("port %d found in %s\n",ntohs(serv_addr.sin_port),inet_ntoa(serv_addr.sin_addr));
close(conn_fd);
return 1;
}
return -1;//实际执行不到这里,只是为了消除编译程序时产生的警告
}
//执行扫描的线程,扫描某一区间的端口
void *scaner (woid *arg)
{unsigned short int i;
struct sockaddr_in serv_addr;
port_segment portinfo;//端口信息
//读取端口区间的信息
memcpy(&portinfo,arg,sizeof(struct_port_segment));
//初始化服务器端地址结构
memset (&serv_addr,0,sizeof (struct sockaddr_in));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr=portinfo.dest_ip.s_addr;
for (i=porinfo.min_port;i<=portinfo.max_port;i++)
{serv_addr.sin_port=htons(i);
if (do_scan(serv_addr)<0)
{continue;//出错则退出进程
}
}
return NULL;
}
/*命令行参数:-m 最大端口,-a 目标主机的IP地址,-n 最大线程数*/
int main(int argc, char **argv)
{
pthread_t* thread; //指向所有的线程ID
int max_port; //最大端口号
int thread_num;//最大线程数
int seg_len;//端口区间长度
structin_addr dest_ip;//目标主机IP
int i; //检查参数个数
if (argc!=7)
{printf("Usage:[-m] [max_port] [-a] [serv_address] [-n] [thread_number]\n");
exit(1);
}
//解析命令行参数
for (i=1;i {if (strcmp("-m",argv)==0)
{max_port=atoi(argv[i+1]);
printf("Usafe:invalid max dest port\n");
exit(1);
}
continue;
}
if(strcmp("-a",argv==0)==0){
if(inet_aton(argv[i+1],&dest_ip)==0{
printf("Usage:invalid dest ip address\n");
exit(1);
}
continue;
}
if (strcmp("-n",argv)==0){
thread_num=atoi(argv[i+1]);
if (thread_num<=0){
printf("Usage:invalid thread_number\n");
} continue;
}
}
//如果输入的最大端口号小于线程数, 则将线程数设为最大端口号
if (max_port thread_num=max_port;
}
seg_len=max_port/thread_num;
if ((max_port%thread_num)!=0){
thread_num+=1;
}
//分配存储所有线程ID的内存空间
thread=(pthread_t*)malloc(thread_num*sizeof(pthread_t));
//创建线程,根据最大端口号和线程数分配每个线程扫描的端口区间
for(i=0;i {port_segment portinfo;
portinfo.dest_ip=dest_ip;
portinfo.min_port=i*seg_len+1;
if (i==thread_num-1)
{portinfo.max_port=max_port;}
else {
portinfo.max_port=portinfo.min_port+seg_len-1;
}
//创建线程
if(pthread_create(&thread,NULL,scaner,(void*)&portinfo)!=0)
{my_err("pthread_create",_LINE_);}
//主线程等待子线程结束
pthread_jion(thread,NULL);
}
retun 0;
}
推荐阅读
  • 本文详细介绍了在 Linux Bash 环境下使用的各种快捷键,包括命令编辑、控制、历史命令重用及特殊命令等,帮助用户提高操作效率。 ... [详细]
  • 本文介绍了如何在 Lisp in a Box 中进行自定义设置,包括快捷键、行号显示和背景主题等。由于直接在 .emacs 文件中设置无效,需要在特定文件中进行配置。 ... [详细]
  • 如何在Linux环境中高效地创建、编译与运行C语言代码
    本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入 ... [详细]
  • https:www.hollischuang.comarchives74 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了如何在使用emacs时去掉ubuntu的alt键默认功能,并提供了相应的操作步骤和注意事项。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • Hyper Text Coffee Pot Control Protocol
    The ... [详细]
  • 3.5.2Calc的公式语法:使用Calc计算一个公式可用是任何能够被Emacs的calc包所识别的代数表达式.注意,在Calc中,的操作符优先级要比*低,因此ab*c会被解释为a ... [详细]
  • CentOS7系统目录LINUX有四种基本文件系统类型普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、 ... [详细]
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • ANSI
    ANSI是什么编码?用Notepad创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII ... [详细]
  • 如何在Windows 10系统上成功安装Singular软件
    目录1.Singular2.使用Linux子系统2.1.使用命令行安装2.2.使用源码包安装3.使用Linux模拟器安装4.使用其他软件安装4.1.使用Sage安装1.Singul ... [详细]
author-avatar
手机用户2502931823
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有