Не компилируется простейший сканер портов - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток подскажите плиз почему не работает (даже компилится не хочет)
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
 
#pragma comment(lib, "ws2_32")
 
int scan(char *ip, u_short port);

main(int argc, char *argv[])
 
{
    int start, end, i;
    char *ip;
    struct servent *srv;
    WSADATA wsd;
    char p_name[10] = " ";
 
    WSAStartup(0x0101, &wsd);
 
    ip = argv[1];
    start = atoi(argv[2]);
    end = atoi(argv[3]);
 
    for(i = start; i <= end; i++)
    {
        srv = getservbyport(htons(i), "tcp");
        (srv == NULL)?strcpy(p_name, "unknw"):strcpy(p_name, srv->s_name);
        if(scan(ip, i))
        {
            printf("%s(%d):\t Open\n", p_name, i);
        }
        else
        {
            printf("%s(%d):\t Close\n", p_name, i);
            continue;
        }
    }
}
 
int scan(char *ip, u_short port)
{
    SOCKET sd;
    WSADATA wsd;
    struct sockaddr_in loc;
    int res = 0;
 
    if(WSAStartup(0x0101, &wsd))
    {
        printf("wsd error\n");
        exit(1);
    }
 
    loc.sin_family  =   AF_INET;
    loc.sin_port    =   htons((u_short *)port);
    loc.sin_addr.s_addr = inet_addr(ip);
 
    sd = socket(AF_INET, SOCK_STREAM, 0);
    
    if(connect(sd, (struct sockaddr *)&loc, sizeof(loc)))
        res = 0;
    else
    {
        res = 1;
    }
closesocket(sd);
return res;
}
VS2010 выдает ошибки Ошибка 1 error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию d:\programming\scaner ports v2\scaner ports v2\scan_ports.cpp 12 1 scaner ports v2 Ошибка 2 error C2664: htons: невозможно преобразовать параметр 1 из "u_short *" в "u_short" d:\programming\scaner ports v2\scaner ports v2\scan_ports.cpp 55 1 scaner ports v2

Решение задачи: «Не компилируется простейший сканер портов»

textual
Листинг программы
int main(int argc, char *argv[])

Объяснение кода листинга программы

  1. Входные данные для функции main это int argc (аргументы командной строки) и char *argv[] (строка команд).
  2. argc содержит количество аргументов в командной строке, а argv[] содержит эти аргументы.
  3. В данном случае, предполагается, что программа вызывается без аргументов, поэтому argc равно 1, и argv[0] содержит имя программы.
  4. В основной функции программы выполняются действия, направленные на решение задачи.
  5. Код программы не представлен, поэтому дальнейшие действия не могут быть описаны.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5