![]() |
Winsock Fehler ("ungültige" IP Adresse)
Hi,
Der folgende Code soll ein RAW Socket erzeugen. Allerdings erhalte ich immer den Fehler: "Die angeforderte Adresse ist in diesem Kontext ungültig." Die Variable "User" ist eine (100% gültige) externe IP Adresse. "Port" ist die Nummer irgendeines Ports im gültigen Bereich. Die exists bei den Socketfehlern fehlen absichtlich.
Delphi-Quellcode:
Mit lokalen IP Adressen funktioniert es, aber nicht mit externen :-(
procedure TForm1.CreatePort(User: String);
var Port,i, AddrLength: Integer; aSocket: TSocket; sa: TSockAddrIn; recvto: Integer; dwBufferInLen, dwBytesReturned: DWord; dwBufferLen: Array[0..9] of DWord; begin try aSocket := socket(AF_INET, SOCK_RAW, IPPROTO_IP); if aSocket = INVALID_SOCKET then begin Form1.Statusbar1.simpleText:='Create: ' + SysErrorMessage (WSAGetLastError); end; recvto := 5000; if setsockopt(aSocket, SOL_SOCKET, SO_RCVTIMEO, @Char(recvto), Sizeof(recvto)) = SOCKET_ERROR then begin Form1.Statusbar1.simpleText := 'Setopt: ' + SysErrorMessage(WSAGetLastError); end; ZeroMemory(@sa,Sizeof(sa)); sa.sin_family := AF_INET; sa.sin_port := htons(Port); sa.sin_addr.s_addr := inet_addr(Pchar(trim(User))); if bind(aSocket, @sa, Sizeof(sa)) = SOCKET_ERROR then begin Form1.Statusbar1.simpleText := 'Bind: ' + SysErrorMessage(WSAGetLastError); end; If connect(aSocket, @sa, SizeOf(sa))=SOCKET_ERROR then begin Showmessage('Connect: ' + SysErrorMessage(WSAGetLastError)); exit; end; finally CloseSocket(aSocket); end; end; Weiss jemand was ich hier falsch mache/nicht verstanden habe? Gruß, Dani |
Re: Winsock Fehler ("ungültige" IP Adresse)
Ganz easy: Mit bind() weißt du einem Socket eine lokale Adresse zu.
Eine lokale eben, keine externe. BTW: Kann es sein, dass der Code die Übersetzung von C nach Delphi des Programmms, das es hier gibt, ist: ![]() Falls ja, sag Bescheid, dann schick ich dir mal was, ich hab das ganze auch mal gemacht, aber aus den in ![]() |
Re: Winsock Fehler ("ungültige" IP Adresse)
Achso *ups*
Und wie weise ich dem Socket eine externe Adresse zu? ;) Den Code habe ich teilweise aus deinem Programm entnommen und editiert, funktioniert super =) |
Re: Winsock Fehler ("ungültige" IP Adresse)
Ach so, aus meinem. Hah mich schon gewundert, dass du teilweise die gleichen Variablennamen benutzt hast :wink:
bind() brauchst du nur für Sockets im Listen-Mode, also für Server. Du kannst einem Socket keine externe Adresse zuweisen. Was willst du denn überhaupt machen, vielleicht kann ich dir dann mehr helfen. |
Re: Winsock Fehler ("ungültige" IP Adresse)
Danke für die Hilfe Chewie!!
Ich glaub ich versteh jetzt wie ich es einstellen muss... |
Re: Winsock Fehler ("ungültige" IP Adresse)
Ich weiß nicht genau, welche Header bei RawSockets schon dabei sind und welche man noch hinzufügen muss.
Die Header der ersten beiden Schichten (MAC-Adresse etc.) sind sicher schon dabei, aber ob du den IP-Header auch selbst mitschicken musst, weiß ich nicht. Den TCP/UDP-Header musst du aber bestimmt selber basteln. Ein Datenverkehr ist immer zwischen zwei Sockets aufgebaut; ein Socket ist die Kombination aus IP-Adresse und Port. Um dich in den Datenverkehr einzuklinken, musst du praktisch ein IP-Paket mit den Adressen und Ports der jeweiligen Verbindungspartner. Evtl. muss auch noch das Paket des Transportprotokolls entsprechend verändert (nur bei TCP: Acknowledgementnumer etc.). Die Sache ist aber die: Wenn der Remote-Rechner das Paket nicht annehmen will, dann tut er das auch nicht. Eine Verbindung geht über ein Two-Way- oder Three-Way-Handshake, das ist der Autausch von TCP-Paketen mit gegenseitig abgestinnten Ack-Nummern. Wie gesagt, wenn der Remote-Rechner die Verbindung nicht annehmen will, dann tut er es auch nicht. |
Re: Winsock Fehler ("ungültige" IP Adresse)
Oh, das ist schlecht, denn von sowas hab ich zu wenig Ahnung :?
Dann lass ich es wohl =( aber trotzdem vielen Dank für die Hilfe! |
Re: Winsock Fehler ("ungültige" IP Adresse)
Heißt es nicht auch, daß nur ein Admin RAW-Socks erstellen darf?
Könnte es daran liegen (das ist, was mir bei 'Kontext' einfällt), |
Re: Winsock Fehler ("ungültige" IP Adresse)
Nein, "Kontext" heißt in diesem Fall, dass eine externe Adresse keinem lokalen Socket zugewiesen werden kann.
Es heißt ja auch bei bind(): Zitat:
Der "normale" Benutzer mit Admin-Rechten unter 2K und XP kann auf jeden Fall RawSockets erstellen. |
Re: Winsock Fehler ("ungültige" IP Adresse)
Was ist denn ein "normaler Benutzer mit Adminrechten".
Frage, kann er sie auch benutzen? Ich weiß, da gibt es irgendeine Einschränkung ... aber welche??!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz