Module: FFI::PCap

Extended by:
Library
Defined in:
lib/pcap/if.rb,
lib/pcap/ffi.rb,
lib/pcap/addr.rb,
lib/pcap/pcap.rb,
lib/pcap/stat.rb,
lib/pcap/dumper.rb,
lib/pcap/handler.rb,
lib/pcap/in_addr.rb,
lib/pcap/version.rb,
lib/pcap/time_val.rb,
lib/pcap/data_link.rb,
lib/pcap/sock_addr.rb,
lib/pcap/packets/ip.rb,
lib/pcap/file_header.rb,
lib/pcap/packets/tcp.rb,
lib/pcap/error_buffer.rb,
lib/pcap/sock_addr_in.rb,
lib/pcap/packet_header.rb,
lib/pcap/packets/ethernet.rb,
lib/pcap/exceptions/read_error.rb

Defined Under Namespace

Modules: Packets Classes: Addr, DataLink, Dumper, ErrorBuffer, FileHeader, Handler, IF, InAddr, PacketHeader, ReadError, SockAddr, SockAddrIn, Stat, TimeVal

Constant Summary collapse

VERSION =

pcap-ffi version

'0.1.0'

Class Method Summary collapse

Class Method Details

.deviceObject



13
14
15
16
17
18
19
20
21
# File 'lib/pcap/pcap.rb', line 13

def PCap.device
  errbuf = ErrorBuffer.new

  unless (name = PCap.pcap_lookupdev(errbuf))
    raise(StandardError,errbuf.to_s,caller)
  end

  return name
end

.each_device(&block) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pcap/pcap.rb', line 23

def PCap.each_device(&block)
  devices = MemoryPointer.new(:pointer)
  errbuf = ErrorBuffer.new

  PCap.pcap_findalldevs(devices,errbuf)
  node = devices.get_pointer(0)

  if node.null?
    raise(StandardError,errbuf.to_s,caller)
  end

  device = IF.new(node)

  until device
    block.call(device) if block
    device = device.next
  end

  PCap.pcap_freealldevs(node)
  return nil
end

.lib_versionObject



9
10
11
# File 'lib/pcap/pcap.rb', line 9

def PCap.lib_version
  PCap.pcap_lib_version
end

.open_dead(datalink, options = {}) ⇒ Object



65
66
67
68
69
70
# File 'lib/pcap/pcap.rb', line 65

def PCap.open_dead(datalink,options={})
  datalink = DataLink[datalink]
  snaplen = (options[:snaplen] || Handler::SNAPLEN)

  return Handler.new(PCap.pcap_open_dead(datalink,snaplen),options)
end

.open_live(options = {}, &block) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/pcap/pcap.rb', line 45

def PCap.open_live(options={},&block)
  device = options[:device]
  promisc = if options[:promisc]
              1
            else
              0
            end
  snaplen = (options[:snaplen] || Handler::SNAPLEN)
  to_ms = (options[:timeout] || 0)
  errbuf = ErrorBuffer.new

  ptr = PCap.pcap_open_live(device,snaplen,promisc,to_ms,nil)

  if ptr.null?
    raise(StandardError,errbuf.to_s,caller)
  end

  return Handler.new(ptr,options,&block)
end

.open_offline(path, options = {}) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/pcap/pcap.rb', line 72

def PCap.open_offline(path,options={})
  path = File.expand_path(path)
  errbuf = ErrorBuffer.new

  ptr = PCap.pcap_open_offline(path,errbuf)

  if ptr.null?
    raise(StandardError,errbuf.to_s,caller)
  end

  return Handler.new(ptr,options)
end