#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>

#define TIMEOUT 60
#define FILTERED 61

int main(int argc, char **argv)
{
  int cSock;
  struct sockaddr_in sSock;
  int port;
  char ip[50];
  int result;

  if(argc > 3)
    {
      printf("## SakiiR Port Scanner ##\n");
      printf("##   http://sakiir.fr  ##\n");
      printf("## Usage : %s ip port  ##\n",argv[0]);
      exit(0);
    }

  strncpy(ip, argv[1] , 49);
  port = atoi(argv[2]);

  cSock = socket(PF_INET, SOCK_STREAM, 0);
  memset((char *) &sSock, 0, sizeof(struct sockaddr_in));
  sSock.sin_family = AF_INET;
  sSock.sin_port = htons(port);
  inet_aton(ip, &(sSock.sin_addr));

  result = connect(cSock,(struct sockaddr *) &sSock, sizeof(struct sockaddr_in));
  switch(result)
    {
    case 0:
      printf("[^] Port %d is Openned\n", port);
      break;
    case TIMEOUT:
      printf("[^] Timeout on port : %d\n", port);
      break;
    case FILTERED:
      printf("[^] Not listenning or filtred port : %d\n", port);
      break;
    default:
      printf("[^] Unknow error on port : %d\n", port);
      break;
    }
}
