UNIX環境編程學習筆記------編程實例----掃描一個網段的端口

#include
#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;




}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章