Скан ip, на открытый порт[Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by OPF_Nik, 11 Jan 2010.

  1. OPF_Nik

    OPF_Nik New Member

    Joined:
    6 Nov 2009
    Messages:
    36
    Likes Received:
    3
    Reputations:
    -5
    Народ, как при нажатии кнопки проверить ip на определенный порт, не используя не каких компонентов, если открыть, то записать в файл txt ??
     
    #1 OPF_Nik, 11 Jan 2010
    Last edited: 11 Jan 2010
  2. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Сейчас делфи нету но попытаюсь написать (так что подправьте меня если я где то сделал ошибку)
    Код в создании формы:
    Code:
    var
     ws:wsadata;
    begin
     wsastartup($101, ws);
    end;
    Процедура:
    Code:
    var
     sock: tsocket;
     ServerInfo: sockaddr_in;
    begin
     sock:=socket(af_inet, sock_stream, 0);
     ServerInfo.sin_family := AF_INET;
     ServerInfo.sin_addr.s_addr := inet_addr('188.40.76.205');
     ServerInfo.sin_port := htons(80);
    
     if connect(sock, ServerInfo, sizeof(serverinfo))=0 then
      begin
        ShowMessage('Порт открыт');
        //Тут можно написать запись в файл
      end
     else
       begin
        ShowMessage('Порт закрыт');
       end;
    end;
    Ах да и в uses пропиши -> winsock
    (если не разберешься или будет ошибка/ошибки -> отпишись, помогу)
     
    #2 wolmer, 11 Jan 2010
    Last edited: 12 Jan 2010
    1 person likes this.
  3. OPF_Nik

    OPF_Nik New Member

    Joined:
    6 Nov 2009
    Messages:
    36
    Likes Received:
    3
    Reputations:
    -5
    wolmer спс
     
  4. OPF_Nik

    OPF_Nik New Member

    Joined:
    6 Nov 2009
    Messages:
    36
    Likes Received:
    3
    Reputations:
    -5
    Code:
    ServerInfo.sin_family = AF_INET;
     ServerInfo.sin_addr.s_addr = inet_addr('127.0.0.1');
     ServerInfo.sin_port = htons(80);
    
    Тут ошибку показывает:
    [Error] Unit1.pas(32): ':=' expected but ':' found
     
  5. xafon

    xafon New Member

    Joined:
    2 Dec 2009
    Messages:
    38
    Likes Received:
    4
    Reputations:
    0
    ServerInfo.sin_family := AF_INET;
    ServerInfo.sin_addr.s_addr := inet_addr('127.0.0.1');
    ServerInfo.sin_port := htons(80);
     
  6. OPF_Nik

    OPF_Nik New Member

    Joined:
    6 Nov 2009
    Messages:
    36
    Likes Received:
    3
    Reputations:
    -5
    Прога работает, но всегда показывает, что порт закрыт
     
  7. OPF_Nik

    OPF_Nik New Member

    Joined:
    6 Nov 2009
    Messages:
    36
    Likes Received:
    3
    Reputations:
    -5
    cheater_man
    Для того же, зачем тебе С++
     
  8. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    wolder ptr ты забыл походу от SOCKADDR
    чем могу... ибо не по делфе я...

    Code:
    BOOL IsPortOpen(char *hostip, WORD dport)
    {
    	WSADATA wsd;
    	WSAStartup(0x202, &wsd);
    
    	SOCKET sck;
    	SOCKADDR_IN addr;
    	int rc;
    
    	addr.sin_family = AF_INET;
    	addr.sin_port = htons(dport);
    	addr.sin_addr.S_un.S_addr = inet_addr(hostip);
    
    	sck = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	rc = connect(sck, (LPSOCKADDR)&addr, sizeof(addr));
    
    	if(rc == 0){
    		closesocket(sck);
    		return TRUE;
    	}
    
    
    	return FALSE;
    }
     
    #8 sn0w, 12 Jan 2010
    Last edited: 12 Jan 2010