#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#define MAX 256
#define SS struct sockaddr
int main(int argc, char *argv[]) {
int socks, start, stop, i;
struct hostent *bounce;
struct sockaddr_in proxey;
char temp[MAX + 1];
char buffer[MAX + 1];
char connected[] = "200";
char conn[] = "GET http://";
int port;
char *target;
target = argv[3];
printf("\nProxy Port Scanner v1.2");
printf("\nby Stuart Manlove [LoG]\n\n");
if (argc < 5)
exit(printf("Usage: %s <proxy><port><target><start_port><stop_port>\n",
argv[0]));
bounce = gethostbyname(argv[1]);
if (!bounce)
exit(printf("Domain lookup error\n"));
proxey.sin_family = AF_INET;
proxey.sin_addr.s_addr = *(long *) (bounce->h_addr);
start = atoi(argv[4]);
stop = atoi(argv[5]);
for (i = start; i <= stop; i++) {
proxey.sin_port = htons(atoi(argv[2]));
socks = socket(AF_INET, SOCK_STREAM, 0);
if (socks < 0)
exit(printf("Socket error\n"));
port = i;
sprintf(temp, "%s%s:%d HTTP/1.0 \n\n", conn, target, port);
if ((connect(socks, (struct sockaddr *) &proxey, sizeof(proxey))) < 0)
exit(printf("Connection error\n"));
write(socks, temp, strlen(temp));
if (read(socks, buffer, sizeof(buffer)) < 0)
exit(printf("Read error"));
if (strcmp(buffer, connected) <= 0)
printf("\nPort: %i open", &i);
printf("%s\n", buffer);
close(socks);
}
printf("\nScan finished\n");
return 0;
}
通过给向代理服务器,发送http request 然后得到相应
HTTP 请求格式:GET http://www.baidu.com HTTP/1.0
HTTP请求格式:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
HTTP响应格式:HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>