Консольный многопоточный сканер портов Аналог NMAP, AngryIPScanner но более узко специализирован, не одной лишней строчки кода, просто и эффективно. Поддержка любых размеров файлов, очень высокая скорость проверки. Указываем файл с исходными IP, файл для сохранения результатов и порт. Использование: Code: scanner.exe <input_filename> <output_filename> <port> <type=tcp> <threads=100> <timeout=1000> пример: scanner.exe ips.txt ip-good.txt 3389 tcp 50 1000 Исходный код (PureBasic): Code: InitNetwork() Global ths.i=Val(ProgramParameter(4)), timeout.i=Val(ProgramParameter(5)), port.i=Val(ProgramParameter(2)), threads.i=0, type.i If ths=0 ths.i=100 EndIf If timeout=0 timeout.i=1000 EndIf If ProgramParameter(3)="udp" type.i=#PB_Network_UDP Else type.i=#PB_Network_TCP EndIf Global filein.s=ProgramParameter(0), fileout.s=ProgramParameter(1), good.l=0, bad.l=0 Global Dim ip.s(ths) Global mx.l=CreateMutex() Procedure check(x) ConnectionID = OpenNetworkConnection(ip(x),port,type,timeout) If ConnectionID good+1 LockMutex(mx) fl.l=OpenFile(#PB_Any,fileout) FileSeek(fl,Lof(fl)) WriteStringN(fl,ip(x)) FlushFileBuffers(fl) CloseFile(fl) UnlockMutex(mx) CloseNetworkConnection(ConnectionID) Else bad+1 EndIf ip(x)="" threads-1 EndProcedure OpenConsole("Port scanner ("+ProgramParameter(3)+":"+ProgramParameter(2)+") (c) \/IRUS ([email protected])") If CountProgramParameters()<3 PrintN("Multi-thread port scanner.") PrintN("(c) \/IRUS ([email protected])") PrintN(GetFilePart(ProgramFilename())+" <input> <output> <port> <type=tcp> <threads=100> <timeout=1000>") PrintN("Press ENTER to continue.") Input() Else EnableGraphicalConsole(1) OpenFile(0,filein) Repeat str.s=ReadString(0) Repeat Delay(10) Until threads<ths i+1 If Not i%100 ConsoleLocate(0,0) Print("Checked: "+Str(i)+" Bad: "+Str(bad)+" Good: "+Str(good)) ConsoleLocate(0,1) Print("Threads: "+Str(threads)+" Last IP: "+str+" ") EndIf For x=1 To ths If ip(x)="" threads+1 ip(x)=str CreateThread(@check(),x) Break EndIf Next x Until Eof(0) EndIf CloseConsole() Компилировать нужно самим.