@@ -53,6 +53,14 @@ def initialize(info = {})
53
53
@pcaprub_error = e
54
54
end
55
55
56
+ begin
57
+ require 'network_interface'
58
+ @network_interface_loaded = true
59
+ rescue ::Exception => e
60
+ @network_interface_loaded = false
61
+ @network_interface_error = e
62
+ end
63
+
56
64
end
57
65
58
66
def stats_recv ( pcap = self . capture )
@@ -376,7 +384,10 @@ def check_pcaprub_loaded
376
384
if not @pcaprub_loaded
377
385
print_status ( "The Pcaprub module is not available: #{ @pcaprub_error } " )
378
386
raise RuntimeError , "Pcaprub not available"
379
- else
387
+ elsif not @network_interface_loaded
388
+ print_status ( "The NetworkInterface module is not available: #{ @network_interface_error } " )
389
+ raise RuntimeError , "NetworkInterface not available"
390
+ else
380
391
true
381
392
end
382
393
end
@@ -406,29 +417,24 @@ def should_arp?(ip)
406
417
407
418
#Netifaces code
408
419
409
- # netifaces code is not available in pcaprub 0.9.2 and prior,
410
- # which is going to be installed in a lot of places. Modules
411
- # which want it should check explicitly for it. TODO: Bug upstream
412
- # to release it for real in 0.9.3
413
420
def netifaces_implemented?
414
- @pcaprub_loaded and
415
- Pcap . respond_to? ( :lookupaddrs ) and
416
- Pcap . respond_to? ( :interfaces ) and
417
- Pcap . respond_to? ( :addresses )
421
+ @network_interface_loaded and
422
+ NetworkInterface . respond_to? ( :interfaces ) and
423
+ NetworkInterface . respond_to? ( :addresses )
418
424
end
419
425
420
426
def list_interfaces
421
427
check_pcaprub_loaded
422
- Pcap . interfaces
428
+ NetworkInterface . interfaces
423
429
end
424
430
425
431
def is_interface? ( dev )
426
432
check_pcaprub_loaded
427
433
if RUBY_PLATFORM == "i386-mingw32"
428
434
if dev =~ /\\ Device\\ NPF_\{ [A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\} /
429
- return Pcap . interfaces . include? ( dev )
435
+ return NetworkInterface . interfaces . include? ( dev )
430
436
elsif dev . to_s =~ /^[0-9]{1,2}$/
431
- if ( dev . to_i <= Pcap . interfaces . length ) and ( dev . to_i >= 0 )
437
+ if ( dev . to_i <= NetworkInterface . interfaces . length ) and ( dev . to_i >= 0 )
432
438
return true
433
439
else
434
440
return false
@@ -437,7 +443,7 @@ def is_interface?(dev)
437
443
return false
438
444
end
439
445
else
440
- return Pcap . interfaces . include? ( dev )
446
+ return NetworkInterface . interfaces . include? ( dev )
441
447
end
442
448
end
443
449
@@ -447,7 +453,7 @@ def get_interface_guid(dev)
447
453
if RUBY_PLATFORM == "i386-mingw32"
448
454
if dev . to_s =~ /^[0-9]{1,2}$/
449
455
if is_interface? ( dev )
450
- Pcap . interfaces [ ( dev . to_i ) - 1 ]
456
+ NetworkInterface . interfaces [ ( dev . to_i ) - 1 ]
451
457
else
452
458
return dev
453
459
end
@@ -462,80 +468,80 @@ def get_interface_guid(dev)
462
468
def get_mac ( dev )
463
469
check_pcaprub_loaded
464
470
dev = get_interface_guid ( dev )
465
- addrs = Pcap . addresses ( dev )
471
+ addrs = NetworkInterface . addresses ( dev )
466
472
raise RuntimeError , "Interface #{ dev } does not exist" if !addrs
467
- raise RuntimeError , "Can not get mac address for interface #{ dev } " if !addrs [ Pcap ::AF_LINK ] [ 0 ] [ 'addr' ]
468
- addrs [ Pcap ::AF_LINK ] [ 0 ] [ 'addr' ]
473
+ raise RuntimeError , "Can not get mac address for interface #{ dev } " if !addrs [ NetworkInterface ::AF_LINK ] [ 0 ] [ 'addr' ]
474
+ addrs [ NetworkInterface ::AF_LINK ] [ 0 ] [ 'addr' ]
469
475
end
470
476
471
477
def get_ipv4_addr_count ( dev )
472
478
check_pcaprub_loaded
473
479
dev = get_interface_guid ( dev )
474
- addrs = Pcap . addresses ( dev )
480
+ addrs = NetworkInterface . addresses ( dev )
475
481
raise RuntimeError , "Interface #{ dev } does not exist" if !addrs
476
- addrs [ Pcap ::AF_INET ] . length
482
+ addrs [ NetworkInterface ::AF_INET ] . length
477
483
end
478
484
479
485
def get_ipv4_addr ( dev , num = 0 )
480
486
check_pcaprub_loaded
481
487
dev = get_interface_guid ( dev )
482
- addrs = Pcap . addresses ( dev )
488
+ addrs = NetworkInterface . addresses ( dev )
483
489
raise RuntimeError , "Interface #{ dev } do not exists" if !addrs
484
- raise RuntimeError , "Interface #{ dev } do not have an ipv4 address at position #{ num } " if addrs [ Pcap ::AF_INET ] . length < num + 1
485
- raise RuntimeError , "Can not get the IPv4 address for interface #{ dev } " if !addrs [ Pcap ::AF_INET ] [ num ] [ 'addr' ]
486
- addrs [ Pcap ::AF_INET ] [ num ] [ 'addr' ]
490
+ raise RuntimeError , "Interface #{ dev } do not have an ipv4 address at position #{ num } " if addrs [ NetworkInterface ::AF_INET ] . length < num + 1
491
+ raise RuntimeError , "Can not get the IPv4 address for interface #{ dev } " if !addrs [ NetworkInterface ::AF_INET ] [ num ] [ 'addr' ]
492
+ addrs [ NetworkInterface ::AF_INET ] [ num ] [ 'addr' ]
487
493
end
488
494
489
495
def get_ipv4_netmask ( dev , num = 0 )
490
496
check_pcaprub_loaded
491
497
dev = get_interface_guid ( dev )
492
- addrs = Pcap . addresses ( dev )
498
+ addrs = NetworkInterface . addresses ( dev )
493
499
raise RuntimeError , "Interface #{ dev } do not exists" if !addrs
494
- raise RuntimeError , "Interface #{ dev } do not have an ipv4 address at position #{ num } " if addrs [ Pcap ::AF_INET ] . length < num + 1
495
- raise RuntimeError , "Can not get IPv4 netmask for interface #{ dev } " if !addrs [ Pcap ::AF_INET ] [ num ] [ 'netmask' ]
496
- addrs [ Pcap ::AF_INET ] [ num ] [ 'netmask' ]
500
+ raise RuntimeError , "Interface #{ dev } do not have an ipv4 address at position #{ num } " if addrs [ NetworkInterface ::AF_INET ] . length < num + 1
501
+ raise RuntimeError , "Can not get IPv4 netmask for interface #{ dev } " if !addrs [ NetworkInterface ::AF_INET ] [ num ] [ 'netmask' ]
502
+ addrs [ NetworkInterface ::AF_INET ] [ num ] [ 'netmask' ]
497
503
end
498
504
499
505
def get_ipv4_broadcast ( dev , num = 0 )
500
506
check_pcaprub_loaded
501
507
dev = get_interface_guid ( dev )
502
- addrs = Pcap . addresses ( dev )
508
+ addrs = NetworkInterface . addresses ( dev )
503
509
raise RuntimeError , "Interface #{ dev } do not exists" if !addrs
504
- raise RuntimeError , "Interface #{ dev } do not have an ipv4 address at position #{ num } " if addrs [ Pcap ::AF_INET ] . length < num + 1
505
- raise RuntimeError , "Can not get IPv4 broadcast address for interface #{ dev } " if !addrs [ Pcap ::AF_INET ] [ num ] [ 'broadcast' ]
506
- addrs [ Pcap ::AF_INET ] [ num ] [ 'broadcast' ]
510
+ raise RuntimeError , "Interface #{ dev } do not have an ipv4 address at position #{ num } " if addrs [ NetworkInterface ::AF_INET ] . length < num + 1
511
+ raise RuntimeError , "Can not get IPv4 broadcast address for interface #{ dev } " if !addrs [ NetworkInterface ::AF_INET ] [ num ] [ 'broadcast' ]
512
+ addrs [ NetworkInterface ::AF_INET ] [ num ] [ 'broadcast' ]
507
513
end
508
514
509
515
def get_ipv6_addr_count ( dev )
510
516
check_pcaprub_loaded
511
517
dev = get_interface_guid ( dev )
512
- raise RuntimeError , "IPv6 information is not available on this platform" if not ::Pcap . const_defined? ( :AF_INET6 )
513
- addrs = Pcap . addresses ( dev )
518
+ raise RuntimeError , "IPv6 information is not available on this platform" if not ::NetworkInterface . const_defined? ( :AF_INET6 )
519
+ addrs = NetworkInterface . addresses ( dev )
514
520
raise RuntimeError , "Interface #{ dev } do not exists" if !addrs
515
- addrs [ Pcap ::AF_INET6 ] . length
521
+ addrs [ NetworkInterface ::AF_INET6 ] . length
516
522
end
517
523
518
524
# NOTE: IPv6 is not implemented on Windows
519
525
def get_ipv6_addr ( dev , num = 0 )
520
526
check_pcaprub_loaded
521
527
dev = get_interface_guid ( dev )
522
- raise RuntimeError , "IPv6 information is not available on this platform" if not ::Pcap . const_defined? ( :AF_INET6 )
523
- addrs = Pcap . addresses ( dev )
528
+ raise RuntimeError , "IPv6 information is not available on this platform" if not ::NetworkInterface . const_defined? ( :AF_INET6 )
529
+ addrs = NetworkInterface . addresses ( dev )
524
530
raise RuntimeError , "Interface #{ dev } do not exists" if !addrs
525
- raise RuntimeError , "Interface #{ dev } do not have an ipv6 address at position #{ num } " if addrs [ Pcap ::AF_INET6 ] . length < num + 1
526
- raise RuntimeError , "Can not get ipv6 address for interface #{ dev } " if !addrs [ Pcap ::AF_INET6 ] [ num ] [ 'addr' ]
527
- addrs [ Pcap ::AF_INET6 ] [ num ] [ 'addr' ] . gsub ( /%(.)*$/ , '' )
531
+ raise RuntimeError , "Interface #{ dev } do not have an ipv6 address at position #{ num } " if addrs [ NetworkInterface ::AF_INET6 ] . length < num + 1
532
+ raise RuntimeError , "Can not get ipv6 address for interface #{ dev } " if !addrs [ NetworkInterface ::AF_INET6 ] [ num ] [ 'addr' ]
533
+ addrs [ NetworkInterface ::AF_INET6 ] [ num ] [ 'addr' ] . gsub ( /%(.)*$/ , '' )
528
534
end
529
535
530
536
def get_ipv6_netmask ( dev , num = 0 )
531
537
check_pcaprub_loaded
532
538
dev = get_interface_guid ( dev )
533
- raise RuntimeError , "IPv6 information is not available on this platform" if not ::Pcap . const_defined? ( :AF_INET6 )
534
- addrs = Pcap . addresses ( dev )
539
+ raise RuntimeError , "IPv6 information is not available on this platform" if not ::NetworkInterface . const_defined? ( :AF_INET6 )
540
+ addrs = NetworkInterface . addresses ( dev )
535
541
raise RuntimeError , "Interface #{ dev } do not exists" if !addrs
536
- raise RuntimeError , "Interface #{ dev } do not have an ipv6 address at position #{ num } " if addrs [ Pcap ::AF_INET6 ] . length < num + 1
537
- raise RuntimeError , "Can not get ipv6 netmask address for interface #{ dev } " if !addrs [ Pcap ::AF_INET6 ] [ num ] [ 'netmask' ]
538
- addrs [ Pcap ::AF_INET6 ] [ num ] [ 'netmask' ]
542
+ raise RuntimeError , "Interface #{ dev } do not have an ipv6 address at position #{ num } " if addrs [ NetworkInterface ::AF_INET6 ] . length < num + 1
543
+ raise RuntimeError , "Can not get ipv6 netmask address for interface #{ dev } " if !addrs [ NetworkInterface ::AF_INET6 ] [ num ] [ 'netmask' ]
544
+ addrs [ NetworkInterface ::AF_INET6 ] [ num ] [ 'netmask' ]
539
545
end
540
546
541
547
# Protocol-specific encoding/decoding methods until more
0 commit comments