silk.c allows you to craft custom HTTP requests. Makes it simple to set the method, vhost, referer, uri, agent, and http version.
35938e66281bbf6dfc683c4e3cf483e136f5cca7e60c03a024454edf01a8cec8
/* $Id: silk.c,v 1.2 2000/06/04 23:08:49 obecian Exp $
*
* . .
* _( (_) )_ _________ ________
* <----, / _____// _____// _____/
* <-----====\_____ \=\_____ \/ \========== RELEASE
* <----' / \/ \ \_\ \
* /_______ /_______ /\______ /
* /\___________\/________\/_______/ /
* /_________________________________/
*
* silk.c - SSG HTTP Request Packet Injection
* (c) 2000 obecian <obecian@celerity.bartoli.org>
*
*/
#define TITLE "silk.c - SSG HTTP Request Packet Injection"
#define CODER "(c) 2000 obecian (obecian@subterrain.net)"
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <netdb.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
void
usage(char *arg)
{
printf("%s -s server -u uri [-p port] [-m method] [-r referer] [-v version]\n\n", arg);
exit(-1);
}
int
main(int argc, char **argv)
{
int opt, i, sock;
extern char *optarg;
extern int opterr;
struct sockaddr_in sin;
struct hostent *he;
char buffer[1024];
int port = 80;
char *method = "GET";
char *server = "www.subterrain.net";
char *vhost = "www.subterrain.net";
char *referer = "http://402686256/";
char *agent = "silk/SSG";
char *version = "HTTP/1.0";
char *uri = "/";
putchar('\n'); puts(TITLE); puts(CODER); putchar('\n');
if (argc < 2)
usage(argv[0]);
opterr = 0;
while ((opt = getopt(argc, argv, "h:u:v:r:s:p:a:m:")) != EOF) {
switch (opt) {
case 's': server = optarg; break;
case 'p': port = atoi(optarg); break;
case 'm': method = optarg; break;
case 'h': vhost = optarg; break;
case 'r': referer = optarg; break;
case 'a': agent = optarg; break;
case 'v': version = optarg; break;
case 'u': uri = optarg; break;
case '?': usage(argv[0]); break;
}
}
if ((he = gethostbyname(server)) == NULL) {
herror("gethostbyname"); exit(-1);
}
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket"); exit(-1);
}
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
sin.sin_addr = *((struct in_addr *)he->h_addr);
bzero(&(sin.sin_zero), 8);
if (connect(sock, (struct sockaddr *)&sin, sizeof(struct sockaddr)) == -1) {
perror("connect"); exit(-1);
}
snprintf(buffer, sizeof(buffer), "%s %s %s\r\nHost: %s\r\nReferer: %s\r\nUser-Agent: %s\r\n\r\n", method, uri, version, vhost, referer, agent);
if ((write(sock, buffer, sizeof(buffer)))<0) { perror("write"); exit(-1); }
printf("Caught!\n\n");
bzero(&buffer, sizeof(buffer));
while((i=read(sock, buffer, sizeof(buffer)))!=0)
write(1, buffer, i);
close(sock); putchar('\n'); exit(0);
}