首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Unix上测试指定IP的端口是否开放

2012-11-06 
Unix下测试指定IP的端口是否开放平时与不同业务之间联调的时候,经常得提前测试对方给的IP及端口是否开放着

Unix下测试指定IP的端口是否开放

平时与不同业务之间联调的时候,经常得提前测试对方给的IP及端口是否开放着,Unix下用其它办法有点麻烦,索性用C语言自己写了一个程序。

?

?

#include <stdio.h>#include <strings.h>#include <stdlib.h>#include <fcntl.h>#include <unistd.h>#include <sys/time.h>#include <sys/types.h>#include <sys/socket.h>//#include <arpa/inet.h>#include <netinet/in.h>#include <errno.h>#include <netdb.h>#define TIMEOUT 5/*FileName:testConn.cfunctions:test host:port which specified whether is alive.call:testConn hostname portreturn values:0 :connected.1:arguments err.2:port number illegal.3:gethostname err.4:network setup err.5:Connect server timeout.*///Build by cc at HPUX: cc -g -Wall testConn.c -o testConnint main(int argc, char **argv){  if(argc != 3)  {    printf("error:Usage: %s host port.\nExample: %s 192.168.0.1 21\n",argv[0],argv[0]);    exit(1);  }    int portnumber=0;  if ((portnumber = atoi (argv[2])) < 0)  {    fprintf (stderr, "error:port number[%s] is illegal.\n", argv[0]);    exit (2);  }  struct hostent *host;  if ((host = gethostbyname (argv[1])) == NULL)  {    fprintf (stderr, "error:Gethostname error\n");    exit (3);  }  int sockfd, flags, res;  struct sockaddr_in servaddr;  fd_set fdr, fdw;  struct timeval timeout;    sockfd = socket(AF_INET, SOCK_STREAM, 0);  if(sockfd < 0)   {    perror("error:Netwrok error...\n");    return 4;  }    /* set socket fd noblock */  if((flags = fcntl(sockfd, F_GETFL, 0)) < 0)   {    perror("error:Netwrok error...\n");    close(sockfd);    return 4;  }    if(fcntl(sockfd, F_SETFL, flags | O_NONBLOCK) < 0)   {    perror("error:Network error...\n");    close(sockfd);    return 4;  }    bzero(&servaddr, sizeof(servaddr));  servaddr.sin_family = AF_INET;  //inet_pton(AF_INET, argv[1], &servaddr.sin_addr);  servaddr.sin_addr = *((struct in_addr *) host->h_addr);  servaddr.sin_port = htons(portnumber);    if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0)   {    if(errno != EINPROGRESS)     { // EINPROGRESS      perror("error:Network err....\n");      close(sockfd);      return 4;    }  }  else   {    printf("Connected\n");    return 0;  }    FD_ZERO(&fdr);  FD_ZERO(&fdw);  FD_SET(sockfd, &fdr);  FD_SET(sockfd, &fdw);    timeout.tv_sec = TIMEOUT;  timeout.tv_usec = 0;    res = select(sockfd + 1, &fdr, &fdw, NULL, &timeout);  if(res < 0)   {    perror("error:Network error...\n");    close(sockfd);    return 4;  }  if(res == 0)   {    printf("error:Connect server timeout\n");    close(sockfd);    return 5;  }  if(res == 1)   {    if(FD_ISSET(sockfd, &fdw))    {      printf("Connected\n");      close(sockfd);      return 0;    }  }  /* Not necessary */  if(res == 2)   {    printf("error:Connect server timeout\n");    close(sockfd);    return 5;  }    printf("error:Connect server timeout\n");  close(sockfd);  return 5;}
?

热点排行