raw sockets in windows...

soul_rebel

ist immer auf der flucht
also ich hab ein problem, undzwar arbeite ich an einer cross-platform anweundung, die gespoofte udp packete verschicken soll; in unix habe ich das ganze hinbekommen, mit raw socks und so. naja in windows wills leider nciht klappen, nun weiß ich das das hier kein windows forum ist (gott sei dank!!!), aber da ich mich in windows foren nicht auskenne und da super oft nur idioten rumhängen wollte ich hier einfach mal fragen ob jemand zufällig weiß wie das geht oder gute resourcen zum thema raw socket in windows kennt. ich weiß dass man raw winsocks nur in win2k und xp ohne sp2 machen kann, aber wie wird nicht ganz ersichtlich aus den infos auf msdn(kein wunder, die habens ja auch absichtlich wieder rausgeschmissen) und beispiele gibts nur als add-on für visual studio dass ich natürlich nciht benutze. wie auch nimmer, wenn jemand ahnung davon hat oder mir ein paar gute links geben könnte (vielleciht gibts ja gute windows entwickler foren...) wäre ich echt dankbar, hab mich schon fast zu tode gegooglet.
danke
 
Ich hab ehrlich gesagt nicht allzu viel Ahnung von Raw Sockets (allgemein und unter Windows :o ) ...
Aber beim googlen mit "raw sockets" programming windows -SP2 bin ich auf diese Seite[1] gestossen.
Dort wird erklärt wie man einen Raw ICMP Socket erstellt:
Code:
[b]Auszug aus dem code[/b]
/* 
 * Function icmp_open() 
 * 
 * Description: opens an ICMP "raw" socket.
 */ 
SOCKET icmp_open(void) { 
  SOCKET s; 
  s = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP); 
  if (s == SOCKET_ERROR) { 
    WSAErrMsg("socket(type=SOCK_RAW, protocol=IPROTO_ICMP)");
    return (INVALID_SOCKET); 
  } 
  return (s); 
} /* end icmp_open() */
Schaus dir mal an, vielleicht hilft es dir ja weiter.

[1] http://www.sockets.com/ch16.htm#SockRaw
 
ja die einzigen raw socks die winxpsp2 hinkriegt sind icmp pakete. aber auf die service pack2 leute kann ich erst mal verzichten, wäre ja schon froh wenn ich es auf win2k und xpsp1 hinkriege, habe inzwischen auch ein paar quellcodes gefunden die das angeblich machen. obwohl es bei mir ja recht ähnlich aussieht und nciht geht... naja ich werds versuchen...hm blödes windows starten...grummel..grummel
 
Das ist ein Portscanner von mir, den ich irgendwann mal für Windows geschrieben hab. Daraus sollte für dich ersichtlich werden, wie man Raw-Sockets benutzt. Das steht aber auch alles auf www.msdn.com



///////////////////////////////////////////////////////////////////////////////
// INCLUDES
///////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "stdlib.h"
#include "windows.h"
#include "winsock.h"
///////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////
// DEFINES
///////////////////////////////////////////////////////////////////////////////
#define LPORT 130
#define HPORT 140
#define IPADDR "127.0.0.1"
#define PROGINFO "Mega Lame Portscanner 1.0 by Sewin"
///////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////
// MAIN FUNCTION
///////////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
// The Variables
int Count;
UINT Option;
WORD Version;
SOCKET Socket;
WSADATA WSAData;
SOCKADDR_IN Address;

// Show Program Info
printf("\n");
printf(PROGINFO);
printf("\n \n");

// Non-Unix Startup Routine
if (WSAStartup(MAKEWORD(2, 0), &WSAData) != 0)
{
printf("Error: Startup failed. \n");
return -1;
}

// Zero-Fill Address Struct
memset(&Address, 0, sizeof(SOCKADDR_IN));

// Set IPv4 Family
Address.sin_family=AF_INET;

// Set Destination IP-Address
Address.sin_addr.s_addr = inet_addr(IPADDR);

// Do from FirstPort to LastPort
for (Count = LPORT; Count < HPORT; Count++)
{
// Set actual Port
Address.sin_port = htons(Count);

// Socket Open
if ((Socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Error: Could not create Socket. \n");
return -1;
}

// Disable Socket Option SO_KEEPALIVE
Option = 0;
if (setsockopt(Socket, SOL_SOCKET, SO_KEEPALIVE, (char *) &Option, sizeof(Option)) != 0)
{
printf("Error: Could not set socket option. \n");
printf("%d", WSAGetLastError());
return -1;
}

// Enable Socket Option SO_DONTLINGER
Option = 1;
if (setsockopt(Socket, SOL_SOCKET, SO_DONTLINGER, (char *) &Option, sizeof(Option)) != 0)
{
printf("Error: Could not set socket option. \n");
printf("%d", WSAGetLastError());
return -1;
}

// Socket Connect
if (connect(Socket, (SOCKADDR*)&Address, sizeof(SOCKADDR)) != SOCKET_ERROR)
{
// Open Port
printf("%d", Count);
printf("\t open \n");
}
else
{
// Closed Port
printf("%d", Count);
printf("\t close \n");
}

// Socket Close
if (closesocket(Socket) != 0)
{
printf("Error: Could not close socket. \n");
return -1;
}
}

// Non-Unix Cleanup Routine
if (WSACleanup() != 0)
{
printf("Error: Cleanup failed. \n");
return -1;
}

// Exit
return 0;
}
///////////////////////////////////////////////////////////////////////////////
 
jo danke für die antworten!
also ich ahbs inzwischen hinbekommen. das problem war nciht mein code sondern dass meine umgebung (mingw32+qt3-free/win32) die ganzen projekte gegen die library von winsock kompiliert hat und ncht die von winsock2. wenn man aber manuell in den makefiles "-lwsock32" durch "-lws2_32" ersetzt baut er programme die funktionieren :D ...war ziemlich schwer das rauszufinden weil die erste winsock library ja auch (fast) alle symbole der zweiten auflöst.
naja jetzt gehts auf jeden fall
 
Zurück
Oben