Заливка файлов на файлообменик. (SM script)

Для тех, кто хочет сделать мир лучше.
Ответить
Сообщение
Автор
Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#1 Сообщение 29.10.2008, 18:52

Увидев что в SM плагинах есть сокеты.
решил зделать плагин.
Авто запись демок и заливка их на файлообменик
можно на любой например на http://upload2.dump.ru/.

HELLO WORD code (сишный синтаксис)

Код: Выделить всё

// example for the socket extension

#include <sourcemod>
#include <socket>

public Plugin:myinfo = {
	name = "socket example",
	author = "Player",
	description = "This example demonstrates downloading a http file with the socket extension",
	version = "1.1.0",
	url = "http://www.player.to/"
};
 
public OnPluginStart() {
	// create a new tcp socket
	new Handle:socket = SocketCreate(SOCKET_TCP, OnSocketError);
	// open a file handle for writing the result
	new Handle:hFile = OpenFile("dl.htm", "wb");
	// pass the file handle to the callbacks
	SocketSetArg(socket, hFile);
	// connect the socket
	SocketConnect(socket, OnSocketConnected, OnSocketReceive, OnSocketDisconnected, "www.sourcemod.net", 80)
}

public OnSocketConnected(Handle:socket, any:arg) {
	// socket is connected, send the http request

	decl String:requestStr[100];
	Format(requestStr, sizeof(requestStr), "GET /%s HTTP/1.0\r\nHost: %s\r\nConnection: close\r\n\r\n", "index.php", "www.sourcemod.net");
	SocketSend(socket, requestStr);
}

public OnSocketReceive(Handle:socket, String:receiveData[], const dataSize, any:hFile) {
	// receive another chunk and write it to <modfolder>/dl.htm
	// we could strip the http response header here, but for example's sake we'll leave it in

	WriteFileString(hFile, receiveData, false);
}

public OnSocketDisconnected(Handle:socket, any:hFile) {
	// Connection: close advises the webserver to close the connection when the transfer is finished
	// we're done here

	CloseHandle(hFile);
	CloseHandle(socket);
}

public OnSocketError(Handle:socket, const errorType, const errorNum, any:hFile) {
	// a socket error occured

	LogError("socket error %d (errno %d)", errorType, errorNum);
	CloseHandle(hFile);
	CloseHandle(socket);
}
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#2 Сообщение 29.10.2008, 19:12

мои размышления:
думаю есть два способа.
1-й через протокол HTTP.
думаю ето будет садо&мазо через GET и POST слать файл.
2-й посниферить их утилиту для закачки файлов.
думаю там протокол будет проще)
Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Аватара пользователя
koshmel
VIP
VIP
Сообщения: 373
Зарегистрирован: 24.03.2007
Контактная информация:

#3 Сообщение 05.11.2008, 18:11

Заливка Файлов на http://rapidshare.com/
проходит в 4 пакета
1-й запрос

Код: Выделить всё

GET /cgi-bin/upload.cgi?intsysdata=1 HTTP/1.1
Connection: Keep-Alive
Host: rapidshare.com
Accept: text/xml, */*
Accept-Charset: iSO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: identity
Accept-Language: de-de;q=0.5,en;q=0.3
Referer: http://rapidshare.com/
User-Agent: RapidUploader[v1,2]
1-й ответ (получаем адрес куда заливать)

Код: Выделить всё

HTTP/1.1 200 OK
P3P: CP="ALL DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR STP UNI NAV STA PRE"
Date: Wed, 05 Nov 2008 13:47:35 GMT
Connection: close
Accept-Ranges: bytes
Content-Type: text/html; charset=ISO-8859-1
Cache-Control: no-cache
Content-Length: 8

543,V1.2
2- запрос (самый геморрой)

Код: Выделить всё

POST /cgi-bin/upload.cgi HTTP/1.0
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=--------110508154735784
Content-Length: 2272 (размер всего блока от разделителя до разделителя)
Host: rs543cg.rapidshare.com    (номер 543 берем из 1-го ответа)
Accept: text/xml, */*
Accept-Charset: iSO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding: identity
Accept-Language: de-de;q=0.5,en;q=0.3
Referer: http://rapidshare.com/
User-Agent: RapidUploader[v1,2]
----------110508154735784
Content-Disposition: form-data; name="toolmode2"

1
----------110508154735784
Content-Disposition: form-data; name="filecontent"; filename="C:\Users\User\Desktop\PowerOffLogFile[User].dem"
Content-Type: multipart/form-data
Content-Transfer-Encoding: binary
бинарный код файла
----------110508154735784--
2-ответ (самый нужный)

Код: Выделить всё

HTTP/1.1 200 OK
P3P: CP="ALL DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa TELa OUR STP UNI NAV STA PRE"
Date: Wed, 05 Nov 2008 13:47:35 GMT
Connection: close
Accept-Ranges: bytes
Content-Type: text/html; charset=ISO-8859-1
Cache-Control: no-cache
Content-Length: 192

savedfiles=1 forbiddenfiles=0
http://rapidshare.com/files/160878040/PowerOffLogFile_User_.dem.html
http://rapidshare.com/files/160878040/PowerOffLogFile_User_.dem?killcode=6926925975214395227

Изображение
kadet89 писал(а):Не врубился в этот алгоритм...но думаю моно попробовать через бинарник изменить саму команду...только вот в каком файле она?

Ответить