דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. מציאת כתובת MAC של מכשיר ברשת

מציאת כתובת MAC של מכשיר ברשת

מתוזמן נעוץ נעול הועבר ארכיון code613m
15 פוסטים 4 כותבים 997 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • A מנותק
    A מנותק
    avr416
    כתב ב נערך לאחרונה על ידי
    #1

    אני רוצה לבדוק האם מכשיר מסוים מחובר לרשת, ובמידה וכן - לבצע פעולות מסוימות.

    לשם כך, אני מריץ בשורת הפקודה את הפקודה הבאה: arp -a
    אני מקבל רשימה של מכשירים המחוברים לרשת, כתובת הIP שלהם וכתובת הMAC
    אולם, לא כל המכשירים המחוברים לרשת מזוהים.

    לא הצלחתי למצוא תשובה ברורה בסטאק..

    אשמח לעזרה.
    תודה רבה רבה מראש!!
    אברהם.

    פורסם במקור בפורום CODE613 ב18/01/2017 20:16 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • S מנותק
      S מנותק
      softs
      כתב ב נערך לאחרונה על ידי
      #2

      ARP מציג לך את ה CACHE במחשב שלך שמטבע הדברים שמור אצלו רק מכשירים ששוחחו עם המחשב שלך.

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

      היחיד שיודע את כל הכתובות הוא הראוטר כי הוא מקצה אותם, ברוב הראוטרים יש מקום לצפות ברשימת כל המכשירים המחוברים.

      פורסם במקור בפורום CODE613 ב18/01/2017 21:03 (+02:00)

      תגובה 1 תגובה אחרונה
      3
      • dovidD מחובר
        dovidD מחובר
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #3

        @softs

        היחיד שיודע את כל הכתובות הוא הראוטר כי הוא מקצה אותם, ברוב הראוטרים יש מקום לצפות ברשימת כל המכשירים המחוברים.

        וגם זה זה רק אם הוא הDHCP.
        מה שכל התוכנות עושות זה לולאה על כל האפשרויות בטווח מסכת הרשת.

        פורסם במקור בפורום CODE613 ב18/01/2017 21:14 (+02:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        2
        • A מנותק
          A מנותק
          avr416
          כתב ב נערך לאחרונה על ידי
          #4

          תודה רבה על התשובה!
          @softs

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

          מה פירוש "לא עונה", למה שהוא לא יענה? המכשירים לא מוגדרים לענות אוט' לבקשת ARP?
          @softs

          היחיד שיודע את כל הכתובות הוא הראוטר כי הוא מקצה אותם, ברוב הראוטרים יש מקום לצפות ברשימת כל המכשירים המחוברים.

          יש דרך לגשת אל הראוטר דרך הקוד, כדי לקבל את כל המכשירים המחוברים?

          אני רוצה לכתוב קוד שמנטר את הרשת, ובמידה והוא רואה שמכשיר מסוים (ספציפי, שיש לי את כתובת הMAC שלו) מחובר אליה מעל לפרק זמן מסוים (בערך חצי שעה), הוא שולח מייל לבעל הרשת.
          לשם כך, חשבתי להשתמש בשאילתת ARP, וכך אני יכול לדעת האם הוא מחובר או לא. אבל מדבריך אני מבין שזה לא בדיוק כך, כי גם אם המכשיר מחובר לרשת הוא לא בהכרח יגיב לי לבקשת ARP?
          יש איזה דרך לעשות זאת?

          תודה רבה רבה מראש!
          אברהם.

          פורסם במקור בפורום CODE613 ב18/01/2017 21:16 (+02:00)

          תגובה 1 תגובה אחרונה
          0
          • A מנותק
            A מנותק
            avr416
            כתב ב נערך לאחרונה על ידי
            #5

            @דוד ל.ט.

            @softs
            וגם זה זה רק אם הוא הDHCP.

            מה שכל התוכנות עושות זה לולאה על כל האפשרויות בטווח מסכת הרשת.

            מה הכוונה לולאה ששולחת ARP לכל אחד מהטווחים של הIP האפשרי? מ1-255?

            פורסם במקור בפורום CODE613 ב18/01/2017 21:19 (+02:00)

            תגובה 1 תגובה אחרונה
            0
            • A מנותק
              A מנותק
              avr416
              כתב ב נערך לאחרונה על ידי
              #6

              מצאתי את המאמר הזה:
              https://www.codeproject.com/Tips/889483/How-to-List-all-devices-info-on-your-WLAN-router

              מה שהוא עושה זה נראה לי מה שדוד התכוון, הוא רץ בלולאה על כל האפשרויות של הרשת, ולכל אחד מכתובות הIP הללו הוא שולח שאילתת ARP, ואח"כ הוא מחלץ את כל המידע הדרוש.

              אני קצת שיניתי את הקוד שלו, בע"ה אעלה אותו בהמשך.

              תודה רבה רבה לכל המסייעים!

              פורסם במקור בפורום CODE613 ב18/01/2017 22:33 (+02:00)

              תגובה 1 תגובה אחרונה
              0
              • dovidD מחובר
                dovidD מחובר
                dovid ניהול
                כתב ב נערך לאחרונה על ידי
                #7

                מחילה מאותו כותב מאמר אבל נראה לי שהוא טועה בכמה דברים.
                א. החלטה שלו מה נקרא הרשת הפנימית לא מובנת. הוא רץ מ2 עד 255. למה? יש רשתות פנימיות עם יותר מחשבים.
                ב. הוא שולח arp ע"י פקודת windows פר IP. נראה ממש משוגע. בשביל הצורך שלך זה סביר, אבל אני בהלם שככה הוא כותב במאמר בcodeproject.

                בכלל הוא עושה רושם של מבין בטכנאות יותר מבתכנות.

                פורסם במקור בפורום CODE613 ב18/01/2017 23:16 (+02:00)

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                1
                • dovidD מחובר
                  dovidD מחובר
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #8

                  אני יותר ויותר מזועזע מהקוד שמה, אין שם שורת קוד שאני מסכים איתה, וחלק ממש מעצבנות.
                  קח למשל את קטע הקוד הראשון. הוא עובד עם לולאה על ממשקי הרשת, ומחזיר רק לבסוף את האחרון. למה? ככה.

                  פורסם במקור בפורום CODE613 ב18/01/2017 23:26 (+02:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  1
                  • A מנותק
                    A מנותק
                    avr416
                    כתב ב נערך לאחרונה על ידי
                    #9

                    @דוד ל.ט.

                    א. החלטה שלו מה נקרא הרשת הפנימית לא מובנת. הוא רץ מ2 עד 255. למה? יש רשתות פנימיות עם יותר מחשבים.

                    אני אישית הגדרתי שירוץ עד 10, כי אין לי צורך ביותר מזה. כלומר, לא נראה לי שהראוטר יתן כתובת IP עם סיומת 150 כאשר רק 2 מכשירים מחוברים לרשת, נכון?
                    @דוד ל.ט.

                    ב. הוא שולח arp ע"י פקודת windows פר IP. נראה ממש משוגע. בשביל הצורך שלך זה סביר, אבל אני בהלם שככה הוא כותב במאמר בcodeproject.
                    בכלל הוא עושה רושם של מבין בטכנאות יותר מבתכנות.

                    איך אתה היית עושה? (אני בכלל לא מבין בתחום הזה, לכן אני שואל.. לא כדי לקנטר חלילה.)
                    כשאני שלחתי פקודת ARP כללית, הוא לא מצא לי 2 מכשירים שהיו מחוברים. ורק כאשר שלחתי את הפקודה לIP שלהם ישירות - אז הם ענו לי.
                    או שאתה מתכוון שזה מיותר להפעיל את זה דרך הקומנד ליין ועדיף לעשות את הכל מתוך הקוד?

                    לילה טוב!

                    פורסם במקור בפורום CODE613 ב19/01/2017 00:57 (+02:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • clickoneC מנותק
                      clickoneC מנותק
                      clickone
                      כתב ב נערך לאחרונה על ידי
                      #10

                      אני מבין שאתה יודע את הMAC של המכשיר שאתה מחפש.
                      ומתוכן השאלה כאן ובפוסט של הקלטת הוידאו, אני מבין שאתה הולך על מימוש של זה:
                      http://icode.co.il/מאבטחים-את-הבית-בפחות-מ-80-שורות-קוד/
                      רק בדוטנט במקום בפייתון.
                      ושם הוא אכן משתמש בARP.
                      ראית את המאמר הזה?

                      פורסם במקור בפורום CODE613 ב19/01/2017 11:12 (+02:00)

                      אין טסט כמו פרודקשן.

                      המייל שלי urivpn@gmail.com

                      תגובה 1 תגובה אחרונה
                      1
                      • dovidD מחובר
                        dovidD מחובר
                        dovid ניהול
                        כתב ב נערך לאחרונה על ידי
                        #11
                        foreach (var ipInter in GetInterfacesAddress())
                        	foreach (var element in IpsForMask(ipInter.IPv4Mask, ipInter.Address))
                        	{
                        		var res = await IpArp(element);
                        		if (res != null)
                        			Console.WriteLine("{0}: {1}", element, res);
                        	}
                        
                        [DllImport("iphlpapi.dll", ExactSpelling = true)]
                        public static extern int SendARP(int destIp, int srcIP, byte[] macAddr, ref uint physicalAddrLen);
                        
                        async Task<string> IpArp(IPAddress dst)
                        {
                        	return await Task.Run(() =>
                        	   {
                        		   byte[] macAddr = new byte[6];
                        		   uint macAddrLen = (uint)macAddr.Length;
                        
                        		   if (SendARP(BitConverter.ToInt32(dst.GetAddressBytes(), 0), 0, macAddr, ref macAddrLen) != 0)
                        			   return null;
                        
                        		   string[] str = new string[(int)macAddrLen];
                        		   for (int i = 0; i < macAddrLen; i++)
                        			   str[i] = macAddr[i].ToString("x2");
                        
                        		   return string.Join(":", str);
                        	   });
                        }
                        
                        
                        
                        IPAddress GetNetworkAddress(IPAddress address, IPAddress subnetMask)
                        {
                        	byte[] ipAdressBytes = address.GetAddressBytes();
                        	byte[] subnetMaskBytes = subnetMask.GetAddressBytes();
                        
                        	byte[] broadcastAddress = new byte[ipAdressBytes.Length];
                        
                        	for (int i = 0; i < broadcastAddress.Length; i++)
                        		broadcastAddress[i] = (byte)(ipAdressBytes[i] & (subnetMaskBytes[i]));
                        
                        	return new IPAddress(broadcastAddress);
                        }
                        
                        IEnumerable<IPAddress> IpsForMask(IPAddress ip, IPAddress mask)
                        {
                        	var first = GetNetworkAddress(ip, mask);
                        
                        	var uintFirst = BitConverter.ToUInt32(first.GetAddressBytes().Reverse().ToArray(), 0);
                        	var uintMask = BitConverter.ToUInt32(mask.GetAddressBytes().Reverse().ToArray(), 0);
                        
                        	var num = (~uintMask) - 1;
                        
                        	for (uint i = 1; i < num; i++)
                        	{
                        		var reversed = BitConverter.GetBytes(uintFirst + i).Reverse().ToArray();
                        		yield return new IPAddress(reversed);
                        	}
                        }
                        
                        IEnumerable<UnicastIPAddressInformation> GetInterfacesAddress()
                        {
                        	foreach (var i in NetworkInterface.GetAllNetworkInterfaces())
                        		if (i.OperationalStatus == OperationalStatus.Up && i.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                        			foreach (var element in i.GetIPProperties().UnicastAddresses)
                        				if (element.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        					yield return element;
                        }
                        

                        אני מודה שגם טעון שיפור. אבל זה הרבה יותר נכון מההוא.

                        פורסם במקור בפורום CODE613 ב19/01/2017 13:30 (+02:00)

                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                        תגובה 1 תגובה אחרונה
                        2
                        • A מנותק
                          A מנותק
                          avr416
                          כתב ב נערך לאחרונה על ידי
                          #12

                          דוד - תודה רבה רבה על ההשקעה הענקית!!
                          עשית לי את כל העבודה :lol:
                          clickone אכן אני מנסה לעשות משהו דומה לשלו, אבל לא בדיוק.
                          אני צריך רק זיהוי תנועה, ובמידה וזוהתה תנועה לשמור לוידאו על המחשב. אין צורך לשלוח את זה.
                          כמו כן, יש לי טאבלט שאני יודע את הMAC שלו, וכאשר אני מזהה שהוא התחבר לרשת מעל חצי שעה, אני רוצה לשלוח הודעה לבעל הרשת, ואז הוא יכול אח"כ לבוא ולראות במצלמות מה בדיוק אירע באותו זמן.
                          זה פרויקט קטן שאני עושה עבור חבר.

                          פורסם במקור בפורום CODE613 ב19/01/2017 15:31 (+02:00)

                          תגובה 1 תגובה אחרונה
                          1
                          • A מנותק
                            A מנותק
                            avr416
                            כתב ב נערך לאחרונה על ידי
                            #13

                            רק הערה קטנה על הקוד:
                            בשורה 56 שיניתי את התנאי השני, כיון שאני מחפש מכשיר שמחובר דרך הויפי, ולא דרך האטרנט.

                            i.NetworkInterfaceType == NetworkInterfaceType.Wireless80211
                            

                            תודה ענקית!!

                            פורסם במקור בפורום CODE613 ב19/01/2017 15:39 (+02:00)

                            תגובה 1 תגובה אחרונה
                            2
                            • A מנותק
                              A מנותק
                              avr416
                              כתב ב נערך לאחרונה על ידי
                              #14

                              @avr416

                              רק הערה קטנה על הקוד:
                              בשורה 56 שיניתי את התנאי השני, כיון שאני מחפש מכשיר שמחובר דרך הויפי, ולא דרך האטרנט.

                              i.NetworkInterfaceType == NetworkInterfaceType.Wireless80211
                              

                              תודה ענקית!!

                              תיקון והוספה:
                              זה לא משנה איך המכשיר מחובר לרשת, השאלה איך המחשב שרצה עליו התוכנה מחובר.
                              אם המחשב מחובר בWIFI - צריך לעשות כמו שכתבתי.
                              אם המחשב עם כבל רשת - צריך לעשות כמו בקוד המקורי של דוד ל.ט. לבחור באפשרות Ethernet.

                              פורסם במקור בפורום CODE613 ב26/01/2017 15:21 (+02:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • dovidD מחובר
                                dovidD מחובר
                                dovid ניהול
                                כתב ב נערך לאחרונה על ידי
                                #15

                                לכאורה הכי חכם זה להשמיט את השורה הזאת. כתבתי אותה כי אם לא הייתה לי שגיאה (null ובגלל התקן רשת מסויים שאינני זוכר במחשב שאיננו תחת ידי) אבל זה לא הדרך הנכונה למנוע אותה.

                                פורסם במקור בפורום CODE613 ב26/01/2017 23:12 (+02:00)

                                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                תגובה 1 תגובה אחרונה
                                1

                                בא תתחבר לדף היומי!
                                • התחברות

                                • אין לך חשבון עדיין? הרשמה

                                • התחברו או הירשמו כדי לחפש.
                                • פוסט ראשון
                                  פוסט אחרון
                                0
                                • דף הבית
                                • קטגוריות
                                • פוסטים אחרונים
                                • משתמשים
                                • חיפוש
                                • חוקי הפורום