I wrote a simple port scanner and under linux it's lightning fast while on windows (After small modifications to port over) it's dog slow:
Usage is: portscan.exe [ip address]
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
#define PORT_MIN 0x0000
#define PORT_MAX 0xFFFF
void test_port(SOCKET, struct sockaddr_in *, unsigned short, char *);
int main(int argc, char ** argv){
SOCKET client_socket;
WSADATA wsaData;
struct sockaddr_in target;
unsigned short port = PORT_MIN;
WSAStartup(MAKEWORD(2, 2), &wsaData);
memset(&target, sizeof(target), 0);
if((target.sin_addr.s_addr = inet_addr(argv[1])) != INADDR_NONE)
while(port++ < PORT_MAX)
test_port(client_socket, &target, port, "tcp");
return 0;
}
void test_port(SOCKET client_socket, struct sockaddr_in * target, unsigned short port, char * svc_proto){
struct servent * service;
printf("Testing %s port %u\r", svc_proto, port);
target->sin_family = AF_INET;
target->sin_port = htons(port);
if((client_socket = socket(AF_INET, SOCK_STREAM, 0)) != INVALID_SOCKET)
if(connect(client_socket, (struct sockaddr *)target, sizeof(*target)) != SOCKET_ERROR){
closesocket(client_socket);
if(service = getservbyport(port, svc_proto))
printf("Discovered open port %u (%s)/%s\n", port, service->s_name, svc_proto);
else
printf("Discovered open port %u/%s\n", port, svc_proto);
}
}
What could cause it to be significantly slower?