kann man tcp-pakete "selber" machen?

oyster-manu

oyster-manu

toast
gibt es eine möglichkeit mit linux-boardmitteln ein tcp-paket nach eigenen wünschen zu gestalten (z.b inhalt nur aus nullen) und an eine beliebige IP zu verschicken?

manu
 
Versuchs mal mit irpas , nemesis oder netsed .

Da gibts einiges . Wenn du was programmieren willst dann gibts einige libs.

Schau mal in deinem Packetmanager nach . Such einfach nach tcp.
 
Hallo
Ich würde mal hping3 versuchen.
Denke das ist etwas für solche Dinge.

Gruß Wolfgang
 
Bau dir einfach ein kleines Programm mit Raw-Socket und schon kannst du auch deine Pakete fuer den Socket selber "bauen".
 
dazu müsste man erstmal programmieren können...
 
Für UDP, in meinem schlamp stil und ohne Kommentare, aber könnte helfen:
Code:
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <iostream>
#include <errno.h>
#include <string.h>
#include <linux/ip.h>
#include <linux/udp.h>

using namespace std;

int main(int argc, char* arg[]) {
	
	
	if (argc != 4) {
		cout << "usage: sdos <targetip> <sourceip> <port>" << endl;
		return -1;
	}
		
	iphdr * ipHeader = (iphdr*)calloc(1, sizeof(iphdr));
	udphdr * udpHeader = (udphdr*)calloc(1, sizeof(udphdr));;
	
	int sockd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
	char on = 1;
	setsockopt(sockd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on));
	
	string msg = "ASTALAVISTA";
		
	srand(time(NULL)+clock()*rand());
	
	ipHeader->version = 4;
	ipHeader->ihl = 5;
	ipHeader->tos = 0;
	ipHeader->id = 1+(int)(65535.0 * rand() / (1.0 + RAND_MAX));
	ipHeader->ttl = 128;
	ipHeader->protocol = IPPROTO_UDP;
	ipHeader->check = 0;
	ipHeader->saddr = inet_addr(arg[2]);
	ipHeader->daddr = inet_addr(arg[1]);
	
	udpHeader->source = 0;
	udpHeader->dest = htons(atoi(arg[3]));
	udpHeader->len = htons(sizeof(udphdr)+strlen(msg.c_str()));
	udpHeader->check = 0;
			
	ipHeader->tot_len = sizeof(iphdr)+sizeof(udphdr)+strlen(msg.c_str());
	
	char * packet = (char*)calloc(ipHeader->tot_len, sizeof(char));
	
	strcpy(packet, "");
	memmove(packet, ipHeader, sizeof(iphdr));
	memmove(packet+sizeof(iphdr), udpHeader, sizeof(udphdr));
	memmove(packet+sizeof(iphdr)+sizeof(udphdr), msg.c_str(),                                                      strlen(msg.c_str()));
	
	int i;
	cout << "Packet:" << endl;
	for (i = 0; i<ipHeader->tot_len; i++) {
        	cout << packet[i];
        }
	
	sockaddr_in * tar = (sockaddr_in*)calloc(1, sizeof(sockaddr_in));
	
	tar->sin_port = htonl(atoi(arg[3]));
	tar->sin_family = AF_INET;
	tar->sin_addr.s_addr = inet_addr(arg[1]);
		
	cout << endl << "Packetsize: " << i << endl;
	cout << "Bytes sent: " << sendto(sockd, packet, ipHeader->tot_len, 0, (sockaddr*)tar, sizeof(sockaddr_in)) << endl;
	cout << "Last Error: " << strerror(errno) << endl;
	
	
	return 0;
	
}
 

Ähnliche Themen

Linux System Admin (w/m/g)/innovatives SW-Unternehmen/Vollzeit/ HomeOffice/asap

Artikel: Live-Systeme mit Lesslinux selbst bauen

Installations-Rechte

Netzwerk übertragene Pakete zählen

Verbindung zwischen node.js und redis

Zurück
Oben