Advertisement
Guest User

Untitled

a guest
May 30th, 2012
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.38 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3. use Gtk2 -init;
  4. use Gtk2::GladeXML;
  5. use UI::Dialog;
  6. use UI::Dialog::Backend::Zenity;
  7. use Cwd qw(realpath);
  8.  
  9. unless($> == 0){
  10.     my $fullpath = realpath($0);
  11.     system("/usr/bin/gksu -u root \"$fullpath\"");
  12.     die("You must be root for use macchanger-gtk\n");
  13. }
  14.  
  15. my($programa, $ventanas_dialogs, $ventana_principal, $ventana_informacion, $ventana_acerca, $combobox_newmac_style, $entrada_specific_mac, $etiqueta_specific_mac, $combobox_iface, $etiqueta_vieja_mac, $etiqueta_nueva_mac, $lista, $vista_texto, $vista_texto1, $etiqueta_mac, $entrada_combobox_iface);
  16.  
  17. if(-e 'glade/macchanger-gtk.glade' ){
  18.     $programa = Gtk2::GladeXML->new('glade/macchanger-gtk.glade');
  19. }else{
  20.     $programa = Gtk2::GladeXML->new('/usr/share/macchanger-gtk/macchanger-gtk.glade');
  21. }
  22. $ventanas_dialogs = new UI::Dialog::Backend::Zenity(title => "Gbackground",
  23.                                                     height => 45,
  24.                                                     width => 50,
  25.                                                     listheight => 5,
  26.                                                     order => [ 'zenity', 'xdialog', 'gdialog']                                                                                                                           );
  27.  
  28. &cargar_widgets;
  29. &interfaces_disponibles;
  30.  
  31. $programa->signal_autoconnect_from_package('main');
  32.  
  33. $ventana_principal->show_all();
  34. &esconder;
  35.  
  36. Gtk2->main;
  37.  
  38. sub cargar_widgets {
  39.     $ventana_principal = $programa->get_widget('ventana_principal');
  40.     $entrada_specific_mac = $programa->get_widget('entrada_specific_mac');
  41.     $etiqueta_specific_mac = $programa->get_widget('etiqueta_specific_mac');
  42.     $combobox_newmac_style = $programa->get_widget('combobox_newmac_style');
  43.     $ventana_acerca = $programa->get_widget('ventana_acerca');
  44.     $combobox_iface = $programa->get_widget('combobox_iface');
  45.     $ventana_informacion = $programa->get_widget('ventana_informacion');
  46.     $etiqueta_vieja_mac = $programa->get_widget('etiqueta_vieja_mac');
  47.     $etiqueta_nueva_mac = $programa->get_widget('etiqueta_nueva_mac');
  48.     $entrada_combobox_iface = $programa->get_widget('entrada_combobox_iface');
  49.     $etiqueta_mac =  $programa->get_widget('etiqueta_mac');
  50.     $lista = $programa->get_widget('lista_de_vendedores');
  51.     $vista_texto = $programa->get_widget('vista_texto');
  52.     $vista_texto1 = $programa->get_widget('vista_texto1');
  53. }
  54.  
  55. sub mac {
  56.     my $interfaz = $entrada_combobox_iface->get_text();
  57.     if(@_[0] eq "solo_mac"){
  58.         open(ARCHIVO, "/sys/class/net/$interfaz/address");
  59.         my $mac_actual;
  60.         while(<ARCHIVO>){
  61.             $mac_actual = $_;
  62.         }
  63.         close(ARCHIVO);
  64.         return $mac_actual;
  65.     }
  66.     open(ARCHIVO, "/sys/class/net/$interfaz/address");
  67.     while(<ARCHIVO>){
  68.         $etiqueta_mac->set_markup("Now your MAC in <b>$interfaz</b> is: <span foreground=\"blue\">$_</span>");
  69.     }
  70.     close(ARCHIVO);
  71. }
  72.  
  73. sub on_boton_cambiar_mac_clicked {
  74.     my $interfaz = &captura_de_informacion;
  75.     my $commande = "ifconfig $interfaz down";
  76.     my $resultat = system($commande);
  77.     if($interfaz eq 'lo' || $interfaz eq 'sit0'){
  78.         $ventanas_dialogs->error(title => "Error, interface unsopported", text => 'This interface don\'t support change the MAC Address');
  79.         return $ventana_principal->show_all;
  80.     }
  81.     my $activo = $combobox_newmac_style->get_active();
  82.     return 0 if $interfaz == 1;
  83.     my($resultado, @posible_error);
  84.     chomp($resultado = `/usr/bin/macchanger --endding $interfaz`) if($activo == 0);
  85.     chomp($resultado = `/usr/bin/macchanger --another $interfaz`) if($activo == 1);
  86.     chomp($resultado = `/usr/bin/macchanger -A $interfaz`) if($activo == 2);
  87.     chomp($resultado = `/usr/bin/macchanger --random $interfaz`) if($activo == 3);
  88.     if($activo == 4){
  89.         my $nueva_mac = $entrada_specific_mac->get_text();
  90.         if($nueva_mac eq ''){
  91.             $ventanas_dialogs->error(title => "Error, not MAC Address", text => 'Please write a MAC Address that yo want change');
  92.             return $ventana_principal->show_all;
  93.         }
  94.         if($nueva_mac =~ /^\w\w:\w\w:\w\w:\w\w:\w\w:\w\w$/){
  95.             chomp($resultado = `/usr/bin/macchanger --mac $nueva_mac $interfaz`);
  96.         }else{
  97.             $ventanas_dialogs->error(title => "Error, MAC Address incorrect", text => 'The MAC Address is incorrect please write a correct MAC Address');
  98.             return $ventana_principal->show_all;
  99.         }
  100.     }
  101.     if($resultado eq /set device name: No such device/){
  102.         $ventanas_dialogs->error(title => "Error, don\'t exist network interface", text => 'Please give a correct network interface because it don\'t exist or is up. The interface <b>must</b> be down');
  103.     } elsif($resultado eq /.*interface up or not permission.*/){
  104.             $ventanas_dialogs->error(title => "Error, Operation not permitted", text => 'Error, probably you don\'t have permission. Are you root?');
  105.     }
  106.     else{
  107.         my @mac = split('\n', $resultado);
  108.         $etiqueta_vieja_mac->set_markup("<span foreground=\"red\">@mac[0]</span>");
  109.         $etiqueta_nueva_mac->set_markup(" <span foreground=\"blue\">@mac[1]</span>");
  110.         &mac;
  111.         $ventana_informacion->show_all;
  112.     }
  113.     my $commande = "ifconfig $interfaz up";
  114.         my $resultat = system($commande);
  115. }
  116.  
  117. sub interfaces_disponibles {
  118.     my @archivos = </sys/class/net/*>;
  119.     my @interfaces;
  120.     foreach my $archivo (@archivos) {
  121.         my @basurita =  split(/\//, $archivo);
  122.         next if ($basurita[4] eq "lo" || $basurita[4] eq "sit0");
  123.         push (@interfaces, @basurita[4]);
  124.     }
  125.     foreach (@interfaces) {
  126.         $combobox_iface->append_text("$_");
  127.     }
  128. }
  129.  
  130. sub captura_de_informacion {
  131.     my $interfaz = $entrada_combobox_iface->get_text();
  132.     return $interfaz if($interfaz);
  133.     $ventanas_dialogs->error(title => "Error, not network interface", text => 'Please give the network interface that you want change the MAC address');
  134.     return 1;
  135. }
  136.  
  137. sub esconder {
  138.     $entrada_specific_mac->hide();
  139.     $etiqueta_specific_mac->hide();
  140. }
  141.  
  142. sub on_combobox_newmac_style_changed {
  143.     my $activo = $combobox_newmac_style->get_active();
  144.     if($activo == 4){
  145.         $entrada_specific_mac->show_all();
  146.         $etiqueta_specific_mac->show_all();
  147.     } else{
  148.         $entrada_specific_mac->hide();
  149.         $etiqueta_specific_mac->hide();
  150.     }
  151. }
  152.  
  153. sub on_boton_mac_actual_clicked {
  154.     my $mac = &mac('solo_mac');
  155.     my $interfaz = $entrada_combobox_iface->get_text();
  156.     if ($interfaz eq ""){
  157.         $ventanas_dialogs->error(title => "Error, not network interface", text => 'Please give the network interface that you show the MAC address');
  158.     } else {
  159.         $ventanas_dialogs->msgbox(title => "Actual MAC of $interfaz", text => "The actual MAC of $interfaz inface is: <span foreground=\"red\">$mac</span>");
  160.     }
  161. }
  162.  
  163. sub on_boton_lista_clicked {
  164.     my $buffer = Gtk2::TextBuffer->new;
  165.     open(LISTA, '/usr/share/macchanger/OUI.list');
  166.     while(<LISTA>){
  167.         $buffer->insert_at_cursor("$_");
  168.     }  
  169.     close(LISTA);
  170.     $vista_texto->set_buffer($buffer);
  171.     $buffer = Gtk2::TextBuffer->new;
  172.     open(LISTA, '/usr/share/macchanger/wireless.list');
  173.     while(<LISTA>){
  174.         $buffer->insert_at_cursor("$_");
  175.     }  
  176.     close(LISTA);
  177.     $vista_texto1->set_buffer($buffer);
  178.     $lista->show_all;
  179. }
  180.  
  181. sub on_ventana_acerca_close {
  182.     $ventana_acerca->hide;
  183. }
  184.  
  185. sub on_ventana_acerca_delete_event {
  186.      my $w = shift;
  187.     $w->hide;
  188.     1;
  189. }
  190.  
  191. sub on_lista_de_vendedores_delete_event {
  192.      my $w = shift;
  193.     $w->hide;
  194.     1;
  195. }
  196.  
  197. sub on_ventana_acerca_response {$ventana_acerca->hide;}
  198. sub on_boton_aceptar_lista_vendedores_clicked {$lista->hide();}
  199. sub on_boton_abrir_lista_vendedores_clicked {$lista->show_all;}
  200. sub on_boton_salir_clicked {Gtk2->main_quit}
  201. sub on_ventana_principal_delete_event {Gtk2->main_quit}
  202. sub on_boton_salir_menu_activate {Gtk2->main_quit}
  203. sub on_boton_acercade_menu_activate {$ventana_acerca->show_all();}
  204. sub on_boton_aceptar_ventana_informacion_clicked {$ventana_informacion->hide();}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement