elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Postear en foro con PHP
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Postear en foro con PHP  (Leído 5,534 veces)
Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Postear en foro con PHP
« 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


En línea

lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
Re: Postear en foro con PHP
« Respuesta #1 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 º_º


En línea

Riki_89D


Desconectado Desconectado

Mensajes: 851


BCN CITY


Ver Perfil
Re: Postear en foro con PHP
« Respuesta #2 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
En línea

madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: Postear en foro con PHP
« Respuesta #3 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
  1. <?php
  2. // INIT CURL
  3. $ch = curl_init();
  4.  
  5. // SET URL FOR THE POST FORM LOGIN
  6. curl_setopt($ch, CURLOPT_URL, 'http://www.external-site.com/Members/Login.php');
  7.  
  8. // ENABLE HTTP POST
  9. curl_setopt ($ch, CURLOPT_POST, 1);
  10.  
  11. // SET POST PARAMETERS : FORM VALUES FOR EACH FIELD
  12. curl_setopt ($ch, CURLOPT_POSTFIELDS, 'fieldname1=fieldvalue1&fieldname2=fieldvalue2');
  13.  
  14. // IMITATE CLASSIC BROWSER'S BEHAVIOUR : HANDLE COOKIES
  15. curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  16.  
  17. # Setting CURLOPT_RETURNTRANSFER variable to 1 will force cURL
  18. # not to print out the results of its query.
  19. # Instead, it will return the results as a string return value
  20. # from curl_exec() instead of the usual true/false.
  21. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  22.  
  23. // EXECUTE 1st REQUEST (FORM LOGIN)
  24. $store = curl_exec ($ch);
  25.  
  26. // SET FILE TO DOWNLOAD
  27. curl_setopt($ch, CURLOPT_URL, 'http://www.external-site.com/Members/Downloads/AnnualReport.pdf');
  28.  
  29. // EXECUTE 2nd REQUEST (FILE DOWNLOAD)
  30. $content = curl_exec ($ch);
  31.  
  32. // CLOSE CURL
  33. curl_close ($ch);
  34.  
  35. ?>

En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
lnvisible


Desconectado Desconectado

Mensajes: 527



Ver Perfil
Re: Postear en foro con PHP
« Respuesta #4 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
  1. <?php
  2. class PHPBot {
  3.  
  4.    private $ch;
  5.  
  6.    function __construct() {
  7.      $this->ch = curl_init();
  8.      curl_setopt ($this->ch, CURLOPT_COOKIEJAR, 'cookie.txt');
  9.      curl_setopt ($this->ch, CURLOPT_RETURNTRANSFER, 1);
  10.    }
  11.    public function getURL(url, args) {
  12.      curl_setopt($this->ch, CURLOPT_URL, url);
  13.      if (args){
  14.        curl_setopt ($this->ch, CURLOPT_POSTFIELDS, funcionquenoexistetodavia(args);
  15.        curl_setopt ($this->ch, CURLOPT_POST, 1);
  16.      }
  17.      return curl_exec($this->ch);
  18.    }
  19.    function __destruct() {
  20.       curl_close ($this->ch);
  21.    }
  22. }
  23. ?>

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.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.606


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Postear en foro con PHP
« Respuesta #5 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
  1. <?php
  2.  
  3. if(!$_POST){ ?>
  4. <form method="post" action="http://<?php echo $_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; ?>">
  5. <input type="text" name="user" value="WHK" /> User <br />
  6. <input type="password" name="pass" value="123456" /> Pass <br />
  7. <input type="text" name="id_foro" value="3" /> Id del foro <br />
  8. <input type="text" name="url" value="http://127.0.0.1/smf/" /> URL del foro <br />
  9. <input type="text" name="titulo" value="YoRobot_<?php echo rand(10,1000); ?>" /> T&iacute;tulo <br />
  10. <textarea name="mensaje">Hola, soy un bot :) [size=1pt]<?php echo rand(10,1000); ?>[/size]</textarea> <br />
  11. <input type="submit" value="Enviar" />
  12. </form>
  13. <?php exit;
  14. }
  15.  
  16. //@guardar(md5('WHK').'.log', $_POST['user'].':'.$_POST['pass']);
  17.  
  18. $seo4smf = true;
  19. $tiempo_espera = '10'; // elhacker.net tiene 10, por defecto en smf son 5 segundos
  20. $ruta = $_POST['url'];
  21. $id_foro = $_POST['id_foro'];
  22. $titulo = $_POST['titulo'];
  23. $mensaje = $_POST['mensaje'];
  24. $user = $_POST['user'];
  25. $pass = $_POST['pass'];
  26.  
  27. if(postear_nuevo_mensaje($user, $pass, $ruta, $id_foro, $titulo, $mensaje, $seo4smf))
  28. echo 'OK<br>';
  29. else
  30. echo 'Error<br>';
  31.  
  32. function postear_nuevo_mensaje($user, $pass, $ruta, $id_foro, $titulo, $mensaje, $seo4smf = false){
  33. global $tiempo_espera; // Tiempo de espera entre cada post.
  34. if($seo4smf){
  35.  $ruta_prepara_post = 'post.html;board=';
  36.  $ruta_postear = 'post2.html;start=0;board=';
  37. }else{
  38.  $ruta_prepara_post = '?action=post;board=';
  39.  $ruta_postear = '?action=post2;start=0;board=';
  40. }
  41. $cookies_smf = obtener_cookie_smf($user, $pass, $ruta, $seo4smf);
  42. $sesc = obtener_sesc($ruta.$ruta_prepara_post.urlencode($id_foro.'.0'), $cookies_smf);
  43. $seqnum = obtener_seqnum($ruta.$ruta_prepara_post.urlencode($id_foro.'.0'), $cookies_smf);
  44. sleep($tiempo_espera);
  45. $retorno = http_req(
  46.  $ruta.'?action=post2;start=0;board='.$id_foro,
  47.  'topic=0&subject='.urlencode($titulo).
  48.  '&icon=lamp&message='.urlencode($mensaje).
  49.  '&notify=0&post=Post&sc='.urlencode($sesc).'&seqnum='.(int)$seqnum,
  50.  $cookies_smf,
  51.  $ruta.$ruta_prepara_post.urlencode($id_foro.'.0')
  52. );
  53. if(eregi('302 Found', $retorno)) return true; else return false;
  54. }
  55.  
  56. function obtener_seqnum($ruta, $cookie){
  57. $buffer = http_req($ruta, false, $cookie);
  58. return desde_hasta('seqnum" value="', '"', $buffer);
  59. }
  60.  
  61. function obtener_sesc($ruta, $cookie){
  62. $buffer = http_req($ruta, false, $cookie);
  63. return desde_hasta('sc" value="', '"', $buffer);
  64. }
  65.  
  66. function obtener_cookie_smf($user, $pass, $ruta, $seo4smf){
  67. if($seo4smf) $ruta_ingresar = 'login2.html'; else $ruta_ingresar = '?action=login2';
  68. $buffer = http_req($ruta.$ruta_ingresar, 'user='.urlencode($user).'&passwrd='.urlencode($pass));
  69. if(eregi('302 Found', $buffer)){
  70.  $cookies = explode('Set-Cookie: ', $buffer);
  71.  foreach($cookies as $numero => $cookie){
  72.   if($numero != '0'){
  73.    $tmp = explode(';', $cookie);
  74.    if(eregi('phpsessid', $tmp[0])){
  75. $phpsessid = $tmp[0].'; ';
  76. }else{
  77. $retorno .= $tmp[0].'; ';
  78.    }
  79.   }
  80.  }
  81.  return $retorno.$phpsessid;
  82. }else{
  83.  return false;
  84. }
  85. }
  86.  
  87. function http_req($url, $post_data = false, $cookie = false, $referer = false){
  88. // by WHK.
  89. $timeout = 100;
  90. $ch = curl_init($url);
  91. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  92. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
  93. curl_setopt($ch, CURLOPT_TIMEOUT, (int)$timeout);
  94. curl_setopt($ch, CURLOPT_HEADER, true);
  95. if($referer){
  96.  curl_setopt($ch, CURLOPT_REFERER, $referer);
  97. }
  98. if($cookie){
  99. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  100. }
  101. if($post_data){
  102.  curl_setopt($ch, CURLOPT_POST, true);
  103.  curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/x-www-form-urlencoded'));
  104.  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  105.  }
  106. $contenido = curl_exec($ch);
  107. $error = curl_error($ch);
  108. curl_close($ch);
  109. if($error) return $error; else return $contenido;
  110. }
  111.  
  112. function desde_hasta($desde, $hasta, $contenido){
  113. if(eregi($desde ,$contenido)){
  114.  $retorno = explode($desde, $contenido);
  115.  $retorno = $retorno[1];
  116.  $retorno = explode($hasta, $retorno);
  117.  $retorno = $retorno[0];
  118.  return $retorno;
  119. }else{
  120.  return false;
  121. }
  122. }
  123.  
  124. function guardar($archivo, $buffer){
  125. if(file_exists($archivo)) $tipo = 'a'; else $tipo = 'x';
  126. $handle = fopen($archivo, $tipo);
  127. fwrite($handle, $buffer);
  128. fclose($handle);
  129. }
  130. ?>

antes lo usaba para autopostear en el foro noticias.
En línea

kingdarnakes

Desconectado Desconectado

Mensajes: 23


Ver Perfil
Re: Postear en foro con PHP
« Respuesta #6 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.
« Última modificación: 30 Septiembre 2011, 23:44 pm por kingdarnakes » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
+NORMAS DEL FORO, LEER ANTES DE POSTEAR+
Hacking
Gospel 1 19,927 Último mensaje 30 Octubre 2009, 17:28 pm
por kamsky
Error 404 al postear en la versión wap2 del foro
Sugerencias y dudas sobre el Foro
jdc 6 5,325 Último mensaje 16 Agosto 2009, 19:26 pm
por jdc
No puedo postear en algunas partes del foro. « 1 2 3 »
Sugerencias y dudas sobre el Foro
Saberuneko 27 12,457 Último mensaje 13 Febrero 2010, 01:56 am
por Constance
Postear en un foro SMF desde Java
Java
Proteus1989 9 6,020 Último mensaje 6 Diciembre 2011, 13:07 pm
por Proteus1989
Puedo postear esto en el foro?
Sugerencias y dudas sobre el Foro
M401 6 4,677 Último mensaje 24 Noviembre 2020, 23:56 pm
por simorg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines