ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

21.08.2009, 23:43
|
|
Познающий
Регистрация: 08.12.2007
Сообщений: 92
Провел на форуме: 1216941
Репутация:
35
|
|
как сделать побайтовое чтение файла? (.jpg)
если можна на примере
|
|
|

22.08.2009, 00:17
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
DiSi
Код:
program PicToTxt;
uses
SysUtils;
var
picture1: file of char;
picture2:textfile;
txt_file:textfile;
i:integer;
chr:char;
hex_chr:string[2];
buff:widestring;
{functions}
function ChrToHex(S: Char): String;
begin
Result:= IntToHex(ord(S),2);
end;
function HexToChr(H: String): Char;
begin
Result:= Char(StrToInt('$'+Copy(H,1,2)));
end;
{program start}
begin
{convert pic->txt}
buff:='';
assignfile(picture1,'c:\avata.gif');
reset(picture1);
for i:=1 to filesize(picture1) do
begin
read(picture1,chr);
buff:=buff+ChrToHex(chr);
end;
closefile(picture1);
assignfile(txt_file,'c:\txt_file.txt');
rewrite(txt_file);
write(txt_file,buff);
closefile(txt_file);
{convert txt->pic}
buff:='';
assignfile(txt_file,'c:\txt_file.txt');
reset(txt_file);
while not EOF(txt_file) do
begin
read(txt_file,hex_chr);
chr:=HexToChr(hex_chr);
buff:=buff+chr;
end;
closefile(txt_file);
assignfile(picture2,'c:\avata2.gif');
rewrite(picture2);
write(picture2,buff);
closefile(picture2);
end.
код подходит для обработки небольших файлов(не только картинок), для б0льших - вместо widestring (в качестве буффера) надо будет, конечно, использовать что-нибудь по-серьёзнее
Последний раз редактировалось ErrorNeo; 22.08.2009 в 03:50..
|
|
|

22.08.2009, 00:27
|
|
Познающий
Регистрация: 08.12.2007
Сообщений: 92
Провел на форуме: 1216941
Репутация:
35
|
|
ErrorNeo, СПС!!!!))) помог)
ы)
тут ошибка(
Incompatible types: 'Char' and 'String'
ето когда переделует картинку в тхт((
Последний раз редактировалось DiSi; 22.08.2009 в 00:44..
|
|
|

22.08.2009, 00:34
|
|
Постоянный
Регистрация: 20.06.2008
Сообщений: 323
Провел на форуме: 1240829
Репутация:
165
|
|
НTL, надо делать в отдельном потоке всё!)) Если ты на сокетах делаешь, без всяких индей и прочей хрени, то в главном потоке всё делать это махохизм)
Вот можешь поизучать исходнички http sender (slesh'a), сам на его основе строю запросы. http://slil.ru/27918620
Последний раз редактировалось cremator (c); 22.08.2009 в 00:53..
|
|
|

08.09.2009, 12:46
|
|
Участник форума
Регистрация: 29.08.2008
Сообщений: 151
Провел на форуме: 1551582
Репутация:
107
|
|
Вопрос:
Делаю запрос через браузер. Ответ:
Код:
HTTP/1.1 200 OK
Server: nginx/0.7.41
Date: Tue, 08 Sep 2009 08:04:54 GMT
Content-Type: text/html; charset=windows-1251
Content-Encoding: gzip
Cache-Control: no-cache,no-store,must-revalidate
Pragma: no-cache
Expires: Mon, 08 Sep 2008 08:04:54 GMT
Last-Modified: Tue, 08 Sep 2009 12:04:54 GMT
Vary: Accept-Encoding
Content-Length: 16761
Via: 1.1 inet
Proxy-Connection: close
...
...
Все нормально
Делаю запрос через программу.
Ставлю AcceptEncoding:='deflate, gzip, x-gzip, identity, *;q=0';
В снифере нормально, в программе:
Если ставить AcceptEncoding:='deflate, identity, *;q=0';
то ошибка идет:
Код:
HTTP/1.1 501 Not Implemented (Proxy server error)
Via: 1.1 inet
Proxy-Connection: close
Content-Type: text/html; charset=windows-1251
Content-Length: 435
...
...
Как всё-таки получить ответ в программе?
|
|
|

22.08.2009, 00:38
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
НTL, у тебя зависает на функции "recv"?
если да, то:
Код:
const
GP_TIMEOUT=10000; //это значит таймаут ожидания ответа 10 секунд
+
Код:
function recvdata(sock:TSocket):string;
var
tv : timeval;
fds : TFDSet;
buf : array [1..20000] of char;
res : string;
r : integer;
i:integer;
inc,tmp:integer;
begin
r:=1;
while (r>0) do
begin
FD_ZERO(fds);
FD_SET(sock, fds);
tv.tv_sec := GP_TIMEOUT div 1000;
tv.tv_usec := (GP_TIMEOUT mod 1000) * 1000;
i := select(0, @fds, nil, nil, @tv);
if (i <= 0) then
begin
break;
end;
r := recv(sock, buf, 20000, 0);
res:=res+copy(buf,1,r);
end;
result:=res;
end;
ну и теперь просто вместо, к примеру,
recv(s,sBuff,5000,0);
юзаешь
reply:=recvdata(s);
где s:TSOCKET;
эта функция
Последний раз редактировалось ErrorNeo; 22.08.2009 в 01:02..
|
|
|

22.08.2009, 10:36
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 ErrorNeo короче будет если задать таймаут самому сокету
типа
timeout.tv_usec = 0;
timeout.tv_sec = RECV_TIMEOUT;
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(TIMEVAL));
тогда recv будет автоматом вылетать через RECV_TIMEOUT милесекунд.
т.е. чтобы был таймаут 10 сек нужно RECV_TIMEOUT = 10000;
А потом когда это уже не нужно можно снять таймаут
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 0, 0);
|
|
|

22.08.2009, 17:09
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
уже 2 дня пытаюсь получить HTML код от http://testhtl.ucoz.ru/mchat/
Вот код:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Winsock;
type
TForm1 = class(TForm)
Button1: TButton;
Memo2: TMemo;
Label2: TLabel;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
IP: string;
Form1: TForm1;
implementation
{$R *.dfm}
function HostToIP(Name: string; var Ip: string): Boolean;
var wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin WSAStartup ($0101, wsdata);
try gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, Name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then if Assigned (hostEnt^.h_addr_list) then begin addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin IP := Format ('%d.%d.%d.%d', [byte (addr [0]),byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end else Result := False;
end else Result := False else begin Result := False;
end;
finally
WSACleanup;
end
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:TSocket;
Ws:TWSAData;
addr:sockaddr_in;
se, START_TEXT, STOP_TEXT:string;
login:string;
buf: array[0..123123] of Char;
buf2: array[0..123123] of Char;
sss, zhtml :string;
Shtml :Integer;
begin
HostToIp(form1.Edit1.Text, IP);
WSAStartup($101,Ws);
s:=socket(af_inet, SOCK_STREAM, 0);
addr.sin_family:=af_inet;
addr.sin_port:=htons(80);
addr.sin_addr.S_addr:=inet_addr(pchar(ip));
connect(s,addr,sizeof(addr));
se:='GET /mchat/ HTTP/1.1'#13#10+
'Host: '+form1.Edit1.Text+#13#10+
'User-Agent: Mozilla/5.0 (Windows; ; Windows NT 5.1; rv:1.9.1.2) Gecko/20090729 YB/4.2.0.c'#13#10+
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'#13#10+
'Accept-Language: ru'#13#10+
'Accept-Encoding: deflate'#13#10+
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'#13#10+
'Keep-Alive: 300'#13#10+
'Connection: Keep-Alive' + #13#10+#13#10;
CopyMemory(@buf, PChar(se), Length(se));
send(s,buf,SizeOf(buf),0);
recv(s,buf2,SizeOf(buf2),0);
Memo2.Lines.Text:=buf2;
closesocket(s);
end;
end.
HTML приходит через раз, и если приходит то не весть код а тока часть...
//Help...
|
|
|

22.08.2009, 17:18
|
|
Участник форума
Регистрация: 10.08.2009
Сообщений: 238
Провел на форуме: 724939
Репутация:
108
|
|
Кинь на форму IdHTTP.
RichEdit1.Text:=idhttp1.Get('http://www.mysite.ru/');
|
|
|

22.08.2009, 17:20
|
|
Постоянный
Регистрация: 26.01.2008
Сообщений: 796
Провел на форуме: 5209663
Репутация:
357
|
|
Сообщение от =Zeus=
Кинь на форму IdHTTP.
RichEdit1.Text:=idhttp1.Get('http://www.mysite.ru/');
Я в курсе, надо сокеты
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|