ארכיון יומי: 12 יולי, 2010

מה כתובת ה IP איתה אני יוצא מהמחשב שלי החוצה ?

הנה בעיה תכנותית ידועה: יש לי צורך לדעת מה כתובת ה IP שאיתה אני יוצא החוצה מהמחשב (לא בהכרח מהאינטרנט). חלק מהאנשים יתחילו כאן לנתח את ifconfig, חלק אחר ינסה לגלות דרך השם של המחשב, וחלק נוסף יצרו איזה דימון מסתורי שיתשאל ראוטר כלשהו (באמת נתקלתי במישהו שעשה את זה).

הנה דרך שהיא בנתיים הכי טובה שאני נתקלתי לבצע את המשימה הזו:

require 'socket'

def local_ip
  orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true  # turn off reverse DNS resolution temporarily

  UDPSocket.open do |s|
    s.connect '64.233.187.99', 1
    s.addr.last
  end
ensure
  Socket.do_not_reverse_lookup = orig
end

בזכות העובדה ש UDP חסר מצב, כלומר הוא לא שולח מידע אלא אם "מכריחים" אותו, אנחנו גורמים לקוד שלנו לתשאל את המערכת מה הדרך שבא נצא החוצה (עבור השירות הזה לפחות), ואנחנו מחזירים את הכתובת שהיא במסלול היציאה שלנו מהמחשב.

הכתובת IP זו הכתובת של גוגל, אבל היא לא חשובה. אפשר לשים כל כתובת אחרת שאינה מוגדרת לנו מקומית על המחשב (כלומר כ localhost).

אני חייב לציין שזו הדרך המדוייקת ביותר שנתקלתי בה עד עכשיו.