Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^8: Help with Lorcon XS library

by Bpl (Scribe)
on Jul 21, 2020 at 12:47 UTC ( [id://11119596]=note: print w/replies, xml ) Need Help??


in reply to Re^7: Help with Lorcon XS library
in thread Help with Lorcon XS library

Hi! Many thanks, now it works, It is pretty strange but I think that the problem was related to the string passed as $driver and not to the XS code, WOW i am so happy, would you like to be thanked in the page of metacpan? under the voice HERO of the module. still many thanks, Regards Edoardo M

Replies are listed 'Best First'.
Re^9: Help with Lorcon XS library
by AnomalousMonk (Archbishop) on Jul 21, 2020 at 15:23 UTC

    If PerlMonks helped you by bringing you into contact with knowledgeable people, please consider showing your gratitude by stopping by the Offering Plate on your way out. :)


    Give a man a fish:  <%-{-{-{-<

      Hi again, yes, I am considering the idea of donating something,I have good memories linked to Perl, since the start of this summer I started writing some articles for the perl.com, I am still waiting the publication, hope soon. I am writing again because the "enemy" strickes back, while I was testing the lorcon_create I tried to put everything into the "new" subroutine for the function initialization, the code is as follows:
      sub new { my (undef, undef, $interface, undef, $driver) = @_; my $self = shift->SUPER::new( driver => $driver, interface => $interface, @_, ); my $drv = lorcon_find_driver($self->driver); if (! $drv) { die "[*] new: lorcon_find_driver: failed\n"; return; } $self->driver( $drv ); my $context = lorcon_create($self->interface, $drv); #_drv if (! $context) { die "[*] new: lorcon_create: failed\n"; return; } $self->_context($context) or die $!; return $self; }
      the only big problem stands when I tried to call the setInjectMode it produces a core dump (again). the code is:
      sub setInjectMode { my $self = shift; my $r = lorcon_open_inject($self->_context);#->_context); if ($r == -1) { die "[*] setInjectMode: lorcon_open_inject: " . lorcon_get_error +( $self->_context ) . "\n"; return; } return 1; }
      I think that there is something wrong in the $self->_context variable, perhaps I haven't understood the use of "_context" **update** dumping the Lorcon initialization variable the result was:
      $VAR1 = bless( [ \152150320, 'wlo1', undef, \152168944 ], 'Net::Lorcon2' );
      I think that the "undef" is referred to the _drv, the \152150320 is the $driver. the \152150320 changes to 'madwifing' modifyng those 2 lines
      # $self->driver( $drv ) ; my $context = lorcon_create($self->interface, $drv); #_drv
      regards Edoardo M.
        ... when I tried to call the setInjectMode it produces a core dump (again)

        Unfortunately I know as much about Lorcon as AnomalousMonk.
        All I'm doing is going from the module's documentation, and the two scripts that ship with the Net-Lorcon2-2.03 source distribution (in the examples folder).
        One of those scripts (inject.pl) demonstrates a correct way to call lorcon_open_inject as follows:
        use strict; use warnings; my $interface = 'wlan1'; my $driver = 'mac80211'; use Net::Lorcon2 qw(:subs); my $lorcon = Net::Lorcon2->new( interface => $interface, driver => $driver, ); $lorcon->setInjectMode; # Beacon my $packet = "\x80\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x02\x02\xe2 +\xc4\xef\x00\x02\x02\xe2\xc4\xef\xd0\xfe\x37\xe0\xae\x0c\x00\x00\x00\ +x00\x64\x00\x21\x08\x00\x0b\x4e\x65\x74\x3a\x3a\x4c\x6f\x72\x63\x6f\x +6e\x01\x08\x82\x84\x8b\x96\x0c\x12\x18\x24\x03\x01\x0d\x05\x04\x00\x0 +1\x00\x00\x2a\x01\x00\x32\x04\x30\x48\x60\x6c"; while (1) { my $t = $lorcon->sendBytes($packet); if (! $t) { print "[-] Unable to send bytes\n"; exit 1; } print "T: $t\n"; sleep(1); }
        (You might want to change the strings that are assigned to $interface and $driver.)
        Assuming that works ok for you, my advice would be to just stick with the approaches that you know to work.

        Note that the SYNOPSIS section of the documentation in Lorcon2.pm (run perldoc Net::Lorcon2 to view it) mentions 2 ways to writing Net::Lorcon2 code.
        Firstly there's "Usage in an OO-way", which involves calling new(). This is the way taken by the code that I've provided in this post.
        Secondly there's "Usage with lorcon2 library API", in which new() is not called. This is the way taken by the code I provided in my earlier posts.

        It's best to stick to just one of those ways throughout your script. Mixing them together in the same script will likely lead to errors or segfaults.

        Also, if you hit a problem, please post the entire script you ran - not just bits of it.
        If the script is a large one you should reduce it so that it:
        a) still demonstrates the problem you are facing;
        b) is as small as possible.
        But, for now, while the scripts are quite small, just post them in full.

        Cheers,
        Rob

        Unfortunately, I know nothing of Lorcon2 or any other Lorcon! :( Perhaps consider sending a private /msg to syphilis to alert him to the presence of your latest node (node number 11119611).


        Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11119596]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (3)
As of 2024-04-26 02:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found