Prüfen ob verbindung zu anderen PC vorhanden

Gamer123

Mitglied
hi

wie kann ich herrausfinden ob die Verbindung zu einem anderen PC im Netzwerk vorhanden ist. Ich hab bis jetzt nur im Internet was mit Socket programmierung gefunden. Gibt es einen einfacherern weg, da ich ja nur ein Datenpaket versenden will und gucken ob es ankommt.

Ich will kein system("ping 192.168.1.1") verwenden, da öffnet sich immer eine Konsole und das sieht doof aus.

Ich programmiere mit Dev-C++
unter Win XP Prof

hoffe ihr hab mein Problem verstanden
 
Socketprogrammierung ist eigentlich schon sehr einfach unter C.
Also eine Viel kürzere Alternative als einen einfachen Verbindungsaufbau wirst du wohl nicht hinbekommen...

Bin da momentan auch nicht so in der materie - aber evt helfen dir RAW sockets ja auchnoch weiter - einfach mal ein bischen einlesen!

Was fürn Betriebssystem nutzt du denn für die Abfrage?
Am besten ist es wohl eine anfrage auf irgend nem Port zu senden und dann gucken ob du eine Verbindung bekommst. Kann die ja danach sofort wieder schließen. Nur auf welchem Dienst man dann aufsetzen soll ist die Frage.

Mir fällt da gerade auch keine intelligente Lösung ein... Bin auch noch nicht so lange mit C Dabei (komme mehr aus der Java-Ecke). Deswegen mal auf andere Meinungen warten.

Hier mal eine Lösung für Windows (muss angepasst werden da es sich um eine spielerei in Sachen Portscanning handelt):
Code:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <winsock2.h>
#include <io.h>

int main(int argc, char *argv[]) {
	WSADATA wsaData;
	
	if (argc < 2) {
		printf("Zu wenig Argumente\n");
		return 1;
	}
	
	if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
		printf("WSA konnte nicht initialisiert werden.");
		return 1;
	}
	
	int socket_nummer;
	unsigned short int portnummer;
	struct sockaddr_in adressinfo;
	
	printf("Starte Scanning an %s - Please wait...\n\n", argv[1]);
	
	for (portnummer = 0; portnummer<1024; portnummer++) {
		
		socket_nummer = socket(AF_INET, SOCK_STREAM, 0);
		
		adressinfo.sin_family = AF_INET;
		adressinfo.sin_addr.s_addr = inet_addr(argv[1]);
		adressinfo.sin_port = htons(portnummer);
		
		if (!connect(socket_nummer, (struct sockaddr *)&adressinfo, sizeof(adressinfo))) {
			printf("Verbindungsaufbau erfolgreich an: IP %s - Port %d\n", argv[1], portnummer);
		}
		
		close(socket_nummer);
		
	}
	
	WSACleanup();

	return 0;
}

Im schlechtesten Fall einfach selbst den Ping implementieren ;)
http://www.google.com/codesearch?hl...box-0.60.5.tar.bz2&cs_f=busybox-0.60.5/ping.c

Naja aber da wirds 100%ig ne intelligentere Lösung geben
 
Zuletzt bearbeitet:
Hallo,

ich denke am Geschicktesten ist es wenn man, wie das ping auch macht, über ICMP ein ICMP echo von der Gegenstelle anfordert. Ein ICMP echo request muss man über raw sockets versenden.
Leider hab ich bei mir kein Windows installiert, kann dir aber bei Interesse ein Linuxbeispiel bauen. Das auf Windows Sockets zu portieren sollte nicht weiter schwer fallen, da die Windows Socket Schnittstelle weitestgehend zu der BSD Socket Schnittstelle kompatibel ist.

Gruß,
RedWing
 
Zuletzt bearbeitet:
Du solltest aber daran denken, dass manche Rechner den Echo-Request abgeschaltet haben. Also: nicht jeder Rechner, der nicht auf ein Ping antwortet, ist nicht am Netz.
 
hallo, ich hab doch noch ein problem

und zwar:

hab den Souce zum testen eins zu eins von der Seite http://msdn.microsoft.com/en-us/libr...50(VS.85).aspx kopiert.

danach hat er die icmpapi.h nicht gefunden.
hab dan von der seite http://source.winehq.org/source/include/icmpapi.h die icmpapi genommen. hat auch prima funktioniert. nun hab ich aber linker errors:

[Linker error] undefined reference to `inet_addr@4'
[Linker error] undefined reference to `IcmpCreateFile@0'
[Linker error] undefined reference to `IcmpSendEcho@32'
[Linker error] undefined reference to `inet_ntoa@4'

ich vermute mal ich muss auf etwas linken, aber auf was

Danke schonmal im vorraus
 
danke, sind schon ein paar weniger

[Linker error] undefined reference to `IcmpCreateFile@0'
[Linker error] undefined reference to `IcmpSendEcho@32'

hab im internet gelesen das ich die Iphlpapi.lib brauche, welche ich in der SDK von msdn finde. lad ich grad runter

Edit:
hab die lib mit eingebunden, hat aber nichts gebracht, immer noch die selben fehler
 
Zuletzt bearbeitet:
Zurück