auf offenen Port prüfen



  • Hi,

    ich suche nach einer Möglichkeit im LAN die
    Rechner auf offene Ports zu prüfen.
    Also ob z.B. PC1 auf 139 offen ist.

    Das ganze soll,wenn es fertig ist, ein Netzwerktool
    /Monitor werden, dass einem diverse Funktionen bereitstellt.
    So soll dann auch von dem geprüften PC der Rechnername
    ermittelt werden usw.



  • hi!
    mach doch einfach einen Socket und versuche dich auf 139 zu verbinden. Kriegst du SOCKET_ERROR zurück, dann ist er zu...
    das ist die trivialste Möglichkeit zu prüfen ob ein Port offen ist.

    SOCKADDR_IN addr;
    SOCKET sock;
    long rc;
    
    // Winsock starten
    WSADATA wsa;
    WSAStartup(MAKEWORD(2,0), &wsa);
    
    // Socket ersetellen
    sock = socket(AF_INET, SOCK_STREAM, 0);
    
    // Listensock an port 139 binden
    memset(&addr, 0, sizeof(SOCKADDR_IN));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(139);
    
    rc = getAddrFromString("HEIKES_COMPUTER", &addr);
    if (rc == SOCKET_ERROR)
    	exit(-1);
    
    // Connecten
    rc = connect(sock, (SOCKADDR*)&addr, sizeof(SOCKADDR));
    
    // Konnte Verbindung hergestellt werden?
    if (rc == SOCKET_ERROR)
    	exit(-1); // Konnte nicht connecten
    

    mfG
    matthias



  • Also bei mir kommt da ein fehler:
    error C2065: 'GetAddrFromString' : nichtdeklarierter Bezeichner
    Also die Windows-Socket hab ich drin. Fehlt mir vielleicht ne andere header-datei?

    hansi



  • diese funktion ist doch eh bei jedem socket example code dabei..

    hier:

    long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
    {
    	unsigned long ip;
    	HOSTENT* he;
    
    	if (!hostnameOrIp || !addr)
    		return SOCKET_ERROR;
    
    	ip = inet_addr(hostnameOrIp);
    
    	if (ip != INADDR_NONE)
    	{
    		addr->sin_addr.s_addr=ip;
    		return 0;
    	}
    	else
    	{
    		he = gethostbyname(hostnameOrIp);
    		if (!he)
    			return SOCKET_ERROR;
    		else
    			memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
    
    		return 0;
    	}
    }
    

    matthias



  • bei mir war se irgendwie net dabei. Vielen dank!

    mfg

    Hansi



  • Ich hab nochma ne frage:
    Also ich hab jetz diesen rechner hier via Cross-Over-Kabel mit nem anderen verbunden. Der name des rechners simple und einfach "Laptop".
    Das hab ich dann auch in getAddrFromString reingschrieben. Aber das erzeugt irgendwie nen SOCKET_ERROR.
    Wie kann ich das problem beheben? Kann es vielleicht daran leigen,dass der laptop ne software-firewall auf der netzwerkkarte hat?
    Kann ich auch irgendwie direkt die ip des zu scannenden rechners eingeben?

    thx

    Hansi

    P.S.:Sorry das ich jetz hier den thread zu mülle, bin aber leider noch ziemlicher anfäger



  • indem du statt

    rc = getAddrFromString("HEIKES_COMPUTER", &addr);
    

    das schreibst:

    rc = getAddrFromString("192.168.0.1", &addr);
    


  • funtzt!

    thx

    Hansi


Anmelden zum Antworten