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:
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;
Mit lokalen
IP Adressen funktioniert es, aber nicht mit externen
Weiss jemand was ich hier falsch mache/nicht verstanden habe?
Gruß,
Dani
Dani H.
At Least I Can Say I Tried