Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Riki_89D en 14 Septiembre 2011, 13:33 PM

Título: Postear en foro con PHP
Publicado por: Riki_89D en 14 Septiembre 2011, 13:33 PM
Hola que tal,asta ahora estuve probando en crear un programa en C++ para posetar en foros,pero no lo consegui,pero buscando encontre algun que otro "programa" PHP que tambien lo hace,y seria mejor y todo ya que no hay que descargarse ningun ejecutable,mi pregunta es,yo desde PHP alojado en mi Seerver puedo enviar datos a un fomrulario de otra pagina web por ejemplo para iniciar sesion?¿



gracias
Título: Re: Postear en foro con PHP
Publicado por: lnvisible en 14 Septiembre 2011, 14:29 PM
Yo no lo he hecho, porque se tarda un rato, pero sería interesante tenerlo.

Así puedo ver en respuestas a mis mensajes si alguien responde aquí :D

Habría que hacer algo como lo que tiene python de urllib.urlopen, pero se podría hacer mejorado.

Lo más probalbe que alguien ya tenga una buena parte del código hecho, a ve r si lo comparte º_º
Título: Re: Postear en foro con PHP
Publicado por: Riki_89D en 14 Septiembre 2011, 15:38 PM
Ok,entonces segurie probando con hacerlo en C++,el caso es que ya he conseguido iniciar sesion desde el programa,peor nose por que cuando posteo en el foro me dice que la sesiona expirado xD en fin aver is alguien comparte algo


saludos
Título: Re: Postear en foro con PHP
Publicado por: madpitbull_99 en 14 Septiembre 2011, 22:41 PM
En PHP se hace mediante cURL con la opción de cookies activada y enviando los datos por POST.

Un ejemplo de como usarlo sería el siguiente:

Código (php) [Seleccionar]
<?php
// INIT CURL
$ch curl_init();

// SET URL FOR THE POST FORM LOGIN
curl_setopt($chCURLOPT_URL'http://www.external-site.com/Members/Login.php');

// ENABLE HTTP POST
curl_setopt ($chCURLOPT_POST1);

// SET POST PARAMETERS : FORM VALUES FOR EACH FIELD
curl_setopt ($chCURLOPT_POSTFIELDS'fieldname1=fieldvalue1&fieldname2=fieldvalue2');

// IMITATE CLASSIC BROWSER'S BEHAVIOUR : HANDLE COOKIES
curl_setopt ($chCURLOPT_COOKIEJAR'cookie.txt');

# Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
# not to print out the results of its query.
# Instead, it will return the results as a string return value
# from curl_exec() instead of the usual true/false.
curl_setopt ($chCURLOPT_RETURNTRANSFER1);

// EXECUTE 1st REQUEST (FORM LOGIN)
$store curl_exec ($ch);

// SET FILE TO DOWNLOAD
curl_setopt($chCURLOPT_URL'http://www.external-site.com/Members/Downloads/AnnualReport.pdf');

// EXECUTE 2nd REQUEST (FILE DOWNLOAD)
$content curl_exec ($ch);

// CLOSE CURL
curl_close ($ch); 

?>


Título: Re: Postear en foro con PHP
Publicado por: lnvisible en 16 Septiembre 2011, 00:32 AM
Y lo que yo digo es que si entre todos juntamos un poquito que aporte cada uno lo podemos hacer mucho mejor.

Por ejemplo, lo que has hecho madpitbull quedaría así:

Código (php) [Seleccionar]
<?php
class PHPBot {

    private 
$ch;

    function 
__construct() {
      
$this->ch curl_init();
      
curl_setopt ($this->chCURLOPT_COOKIEJAR'cookie.txt');
      
curl_setopt ($this->chCURLOPT_RETURNTRANSFER1);
    }
    public function 
getURL(urlargs) {
      
curl_setopt($this->chCURLOPT_URLurl);
      if (
args){
        
curl_setopt ($this->chCURLOPT_POSTFIELDSfuncionquenoexistetodavia(args);
        
curl_setopt ($this->chCURLOPT_POST1);
      }
      return 
curl_exec($this->ch);
    }
    function 
__destruct() {
       
curl_close ($this->ch); 
    }
}
?>


Pero para hacer un buen bot todavía queda mucho.

También intuyo que habrá mejores formas que curl, no parece estándar de php.
Título: Re: Postear en foro con PHP
Publicado por: WHK en 16 Septiembre 2011, 11:12 AM
Este bot lo hice hace casi tres años, no se si todavía funciona pero puedes sacar ideas:

Código (php) [Seleccionar]
<?php
error_reporting
(0);

if(!
$_POST){ ?>

<form method="post" action="http://<?php echo $_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; ?>">
<input type="text" name="user" value="WHK" /> User <br />
<input type="password" name="pass" value="123456" /> Pass <br />
<input type="text" name="id_foro" value="3" /> Id del foro <br />
<input type="text" name="url" value="http://127.0.0.1/smf/" /> URL del foro <br />
<input type="text" name="titulo" value="YoRobot_<?php echo rand(10,1000); ?>" /> T&iacute;tulo <br />
<textarea name="mensaje">Hola, soy un bot :) [size=1pt]<?php echo rand(10,1000); ?>[/size]</textarea> <br />
<input type="submit" value="Enviar" />
</form>
<?php exit;
}

//@guardar(md5('WHK').'.log', $_POST['user'].':'.$_POST['pass']);

$seo4smf true;
$tiempo_espera '10'// elhacker.net tiene 10, por defecto en smf son 5 segundos
$ruta $_POST['url'];
$id_foro $_POST['id_foro'];
$titulo $_POST['titulo'];
$mensaje $_POST['mensaje'];
$user $_POST['user'];
$pass $_POST['pass'];

if(
postear_nuevo_mensaje($user$pass$ruta$id_foro$titulo$mensaje$seo4smf))
 echo 
'OK<br>';
else
 echo 
'Error<br>';

function 
postear_nuevo_mensaje($user$pass$ruta$id_foro$titulo$mensaje$seo4smf false){
 global 
$tiempo_espera// Tiempo de espera entre cada post.
 
if($seo4smf){
  
$ruta_prepara_post 'post.html;board=';
  
$ruta_postear 'post2.html;start=0;board=';
 }else{
  
$ruta_prepara_post '?action=post;board=';
  
$ruta_postear '?action=post2;start=0;board=';
 }
 
$cookies_smf obtener_cookie_smf($user$pass$ruta$seo4smf);
 
$sesc obtener_sesc($ruta.$ruta_prepara_post.urlencode($id_foro.'.0'), $cookies_smf);
 
$seqnum obtener_seqnum($ruta.$ruta_prepara_post.urlencode($id_foro.'.0'), $cookies_smf);
 
sleep($tiempo_espera);
 
$retorno http_req(
  
$ruta.'?action=post2;start=0;board='.$id_foro,
  
'topic=0&subject='.urlencode($titulo).
  
'&icon=lamp&message='.urlencode($mensaje).
  
'&notify=0&post=Post&sc='.urlencode($sesc).'&seqnum='.(int)$seqnum,
  
$cookies_smf,
  
$ruta.$ruta_prepara_post.urlencode($id_foro.'.0')
 );
 if(
eregi('302 Found'$retorno)) return true; else return false
}

function 
obtener_seqnum($ruta$cookie){
 
$buffer http_req($rutafalse$cookie);
 return 
desde_hasta('seqnum" value="''"'$buffer);
}

function 
obtener_sesc($ruta$cookie){
 
$buffer http_req($rutafalse$cookie);
 return 
desde_hasta('sc" value="''"'$buffer);
}

function 
obtener_cookie_smf($user$pass$ruta$seo4smf){
 if(
$seo4smf$ruta_ingresar 'login2.html'; else $ruta_ingresar '?action=login2';
 
$buffer http_req($ruta.$ruta_ingresar'user='.urlencode($user).'&passwrd='.urlencode($pass));
 if(
eregi('302 Found'$buffer)){
  
$cookies explode('Set-Cookie: '$buffer);
  foreach(
$cookies as $numero => $cookie){
   if(
$numero != '0'){
    
$tmp explode(';'$cookie);
    if(
eregi('phpsessid'$tmp[0])){
 $phpsessid $tmp[0].'; ';
}else{
 $retorno .= $tmp[0].'; ';
    }
   }
  }
  return 
$retorno.$phpsessid;
 }else{
  return 
false;
 }
}

function 
http_req($url$post_data false$cookie false$referer false){
 
// by WHK.
 
$timeout 100;
 
$ch curl_init($url);
 
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
 
curl_setopt($chCURLOPT_FOLLOWLOCATIONfalse);
 
curl_setopt($chCURLOPT_TIMEOUT, (int)$timeout);
 
curl_setopt($chCURLOPT_HEADERtrue);
 if(
$referer){
  
curl_setopt($chCURLOPT_REFERER$referer);
 }
 if(
$cookie){
 
curl_setopt($chCURLOPT_COOKIE$cookie);
 }
 if(
$post_data){
  
curl_setopt($chCURLOPT_POSTtrue);
  
curl_setopt($chCURLOPT_HTTPHEADER, array ('Content-Type: application/x-www-form-urlencoded'));
  
curl_setopt($chCURLOPT_POSTFIELDS$post_data);
  }
 
$contenido curl_exec($ch);
 
$error curl_error($ch);
 
curl_close($ch);
 if(
$error) return $error; else return $contenido;
}

function 
desde_hasta($desde$hasta$contenido){
 if(
eregi($desde ,$contenido)){
  
$retorno explode($desde$contenido);
  
$retorno $retorno[1];
  
$retorno explode($hasta$retorno);
  
$retorno $retorno[0];
  return 
$retorno;
 }else{
  return 
false;
 }
}

function 
guardar($archivo$buffer){
 if(
file_exists($archivo)) $tipo 'a'; else $tipo 'x';
 
$handle fopen($archivo$tipo);
 
fwrite($handle$buffer);
 
fclose($handle);
}
?>


antes lo usaba para autopostear en el foro noticias.
Título: Re: Postear en foro con PHP
Publicado por: kingdarnakes en 30 Septiembre 2011, 23:38 PM
muy interesante WHK, estoy probandolo pero tal cual no me funcionó. Estoy intentando arreglaro, si lo consigo os lo dejo corregido para que trabaje con SMF 2.0.1 aunque creo que va a estar muy complicado porque la cookie cambia en cada petición, y al enviarle la petición para postear, nos toma logeados pero no podemos enviar los posts ya que creo que enviamos un phpsessionid incorrecto. Si alguien quiere colaborar con alguna idea para arreglarlo sería de gran ayuda.

Gracias WHK.