UNIX环境编程学习笔记------编程实例----扫描一个网段的端口

来源:互联网 发布:mysql 查看事件 编辑:程序博客网 时间:2024/04/28 22:45
#include<unstd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<errno.h>
#include<stdio.h>


int main()


{
//定义循环变量
int  I,j;
//定义一个套接字描述符
int sfd;

//定义一个套接字地址


struct sockaddr_in  S_sockadd;
//定义一个ip地址

struct in_addr s_ip;
u_long ip;
    char p[16];

//定义一个端口号

int port;


//我打算在这里面开辟两个大循环

/*主循环是ip地址  

次循环是端口号
*/

//给定初始ip地址
p[16]="192.168.60.1";
inet_pton(AF_INET,p,&s_ip);
//初始端口号
 
port =1;
//把端口号转为网络字节序


//初始化套接字

S_sockadd->sin.family =AF_INET;
S_sockadd->sin.port=htons(port);
S_sockadd->sin_addr=s_ip;

//创建一个socket

sfd=socket(AF_INET,SOCK_STREAM,0);
if(sfd==-1)
{
perror(socket error);
_exit(1);
}

else

{
for( I=1;I<=509;I++)
{

for(;port<=65535;port++)
{
//调用connect进行连接

int  cr=connect (sfd,(struct sockaddr *)&S_sockadd,sizeof(S_sockadd));
if(cr!=-1)
{
printf("the host is open and :");
inet_ntop(AF_INET,&S_sockadd.sin_addr),&p,sizeof(S_sockadd.sin_addr);
printf("ip is : %s",p);
printf("port :%d",port);
printf("open \n");



}
printf("\n\n");
}


//当端口加1之后,IP地址要自动加1

ip=htonl(S_sockadd.sin_addr);
ip++;
s_ip=ntohl(ip);
S_sockadd.sin_addr=s_ip;


}






}
 
 
return 0;




}
0 0
原创粉丝点击