2016-03-20 2 views
0

Я пытаюсь понять, как использовать net/ping камень и у меня есть несколько вопросов, так как я использую его:рубин путаница использование нетто-пин

  • Зачем вам права администратора на пробег ICMP
  • Верно ли оно или нет? Например:

    Net::Ping::ICMP.new("127.0.0.1").ping?# <= true 
    
    #So I could do something like this: 
    ping = Net::Ping::ICMP.new("127.0.0.1") 
    if ping == true 
        puts "true" 
    else 
        puts "This shouldn't run" 
    end 
    #<= true 
    
    #or does it return packets received? 
    #so I could do something like this: 
    
    ping = Net::Ping::ICMP.new("127.0.0.1")ping? 
    if ping =~ /Received = 1/ 
        puts "true" 
    else 
        puts "This shouldn't run" 
    end 
    #<= true 
    

Я запутался, и я не могу найти что-нибудь на Google, относящиеся к тому, как это работает: https://www.google.com/search?safe=off&btnG=Search&q=ruby+net%3A%3Aping%3A%3Aicmp+tutorial

Если кто-то может помочь мне, что это было бы весьма признателен, спасибо

ответ

1

Это как рубин Evals if:

irb> ping = true 
=> true 
irb > ping =~ /Received = 1/ 
=> nil 
irb> nil ? "NIL is true" : "NIL is not true" 
=> "NIL is not true" 

Результат матча true is nil, и if nil не соответствует действительности. Итак, ваш второй пример всегда выводит «true» (даже если .ping? будет false).

И «привилегии администратора»: вы не можете создавать ICMP-пакет как обычный пользователь. Если вы не используете /bin/ping, который является SUID. (который net/ping драгоценный камень не использовать). `.

+0

Это здорово, и все, кроме этого, я не спросил. – 13aal