2012-05-22 3 views
1

J'ai essayé à la fois Net :: RawIP et Net :: :: Ecrire Layer3. Cela fonctionne bien si je fournis une adresse IP spécifique dans le réseau. alors que je reçois soitComment envoyer un message de diffusion IP en utilisant Perl

sendto() at /usr/lib/perl5/Net/RawIP.pm line 630. shell returned 13 

ou

Net::Write::Layer::send: Permission denied 

si je change l'adresse de destination à 66.66.66.255

des idées?

le code que je utilise est ici

use Net::Write::Layer qw(:constants); 
use Net::Write::Layer3; 
use NetAddr::IP; 
use Net::RawIP; 

$message = "Foo"; 

# using Net::RawIP 
$n = Net::RawIP->new({ 
         ip => { 
          tos => 0xC0, 
          daddr => '66.66.66.2', 
          protocol => 2, 
         }, 
         generic => { 
          data => $message 
         } 
        }); 
$n->send; 

# using Net::Write::Layer3 
my $desc = Net::Write::Layer3->new(
       dst  => '66.66.66.2', 
       protocol => '2', 
       family => NW_AF_INET, 
);  
$desc->open; 
$desc->send($message); 
$desc->close; 
+0

si vous faites IGMP, utilisez mcast_add et les amis dans 'IO :: Socket Multicast' –

Répondre

1

Erreur 13 est généralement EACCES - dire que vous ne disposez pas des autorisations suffisantes pour envoyer à une prise de diffusion.

+1

mais qu'est-ce que cela veut dire? Je cours mon script en tant que root. Comment puis-je obtenir une autorisation suffisante pour le faire? – Reinhard

+1

en fonction de votre système d'exploitation, vous devrez peut-être utiliser 'setsockopt()' pour activer 'SO_BROADCAST'. – Alnitak

Questions connexes