פורסם: 17/05/2021 - 14:13
נושא ההודעה: הכוונה עם Regex שעובד עם search ופחות עם findall
|
הי, אני מנסה למצא כתובות IP חוקיות בתוך טקסט, ה-patern הבא עושה את העבודה כשאני משתמש ב-re.search:
קוד: | ((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) |
לעומת זאת כשאני מנסה למצא את כל הכתובות בבמחרוזה נתונה על ידי שימוש ב-re.findall, אני מקבל פלט לא רלוונטי:
קוד: | re.search(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", "192.168.0.1 10.0.0.1")
<re.Match object; span=(0, 11), match='192.168.0.1'>
re.findall(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", "192.168.0.1 10.0.0.1")
[('0.', '0', '1'), ('0.', '0', '1')] |
כותב בפייתון אם זה רלוונטי.
_________________ איזי גולדנברג
|
|
חזרה לתוכן הדיון |
פורסם: 17/05/2021 - 15:09
נושא ההודעה:
|
זה נראה שהוא לא מסתדר טוב עם ה {3} (ההנחיה לחפש שלוש פעמים)
קוד: |
>>> re.findall(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}", "192.168.0.1 10.0.0.1")
[('192.', '192'), ('168.', '168'), ('0.', '0'), ('10.', '10'), ('0.', '0'), ('0.', '0')]
|
קוד: |
>>> re.findall(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}", "192.168.0.1 10.0.0.1")
[('168.', '168'), ('0.', '0')]
|
זה מעניין, למרות שאם המטרה אבטחת מידע - לבדוק שמה שנתקבל הוא באמת ip
לא עדיף לעשות split
ואז לבדוק שהרווח הוא ספייס ובין הנקודות יש רק מספרים?
|
|
חזרה לתוכן הדיון |
פורסם: 17/05/2021 - 15:34
נושא ההודעה:
|
אם אני מבין אותך נכון, אני מוודא שהכתובת חוקית, כלומר לא מופיע לדוגמה 256.
_________________ איזי גולדנברג
|
|
חזרה לתוכן הדיון |
פורסם: 17/05/2021 - 19:26
נושא ההודעה:
|
כן
|
|
חזרה לתוכן הדיון |
פורסם: 17/05/2021 - 19:35
נושא ההודעה:
|
כל מה שקשור אבטחת מידע אני תמיד מעתיק מאן שהוא- על פני לכתוב לבד,
אני מניח של ip וולידציה אפשר להעתיק מפו
https://www.tutorialspoint.com/validate-ip-address-in-python
לדברים יותר מורכבים - עדיף סיפריות מוכנות של anti-semi
|
|
חזרה לתוכן הדיון |
פורסם: 18/05/2021 - 16:22
נושא ההודעה:
|
מה שאני מחפש זה Regex שמזהה כתובת IP תקינה, כלומר רצף של 4 מספרים בין 0 ל-255 מופרדים על ידי 3 נקודות.
בקישור שצרפת אני יכול להזין String ולקבל תשובה אם הוא תקין ככתובת IP.
_________________ איזי גולדנברג
|
|
חזרה לתוכן הדיון |
פורסם: 18/05/2021 - 16:50
נושא ההודעה:
|
עטוף הכל בסוגריים, אז התוצאה הראשונה של כל tuple ברשימה ש-findall תחזיר לך תהיה הכתובת.
בכל מקרה, נראה שה-regex עצמו לא טוב, מאחר והוא תופס גם דברים אחרים, דוגמה:
קוד: |
In [4]: re.findall(r"(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){,3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))", "192.168.0.1 asd sdg sd 3245 10.0.0.1")
Out[4]:
[('192.168.0.1', '0.', '0', '1'),
('32', '', '', '32'),
('45', '', '', '45'),
('10.0.0.1', '0.', '0', '1')]
|
|
|
חזרה לתוכן הדיון |
פורסם: 18/05/2021 - 18:05
נושא ההודעה:
|
תודה מאיר.
מישהו מכיר Regex שפועל כמו שצריך ומזהה כתובת IP? הגיוני שכבר מישהו שבר את הראש על זה וכתב אחד שמחזיר רשימה עם כל הכתובת ב-String
_________________ איזי גולדנברג
|
|
חזרה לתוכן הדיון |
פורסם: 18/05/2021 - 20:58
נושא ההודעה:
|
אם מעניין אותך ipv4 אופי תפרק עם re.split לפי '.'
ותכתוב פונקציה שתקבל 4 ארגומנטים ותבדוק אותם
|
|
חזרה לתוכן הדיון |
פורסם: 26/05/2021 - 16:18
נושא ההודעה:
|
אולי זה?
https://ihateregex.io/expr/ip/
למקרה והקישור יעלם:
קוד: |
(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}
|
|
|
חזרה לתוכן הדיון |
פורסם: 26/05/2021 - 17:02
נושא ההודעה:
|
כמעט. זה מקבל גם את הכתובת 000.000.000.000 .
|
|
חזרה לתוכן הדיון |
פורסם: 26/05/2021 - 18:48
נושא ההודעה:
|
צפריר : | כמעט. זה מקבל גם את הכתובת 000.000.000.000 . |
תכלס זו כתובת IP חוקית להגדרה של כתובת IP לא חוקית
https://en.wikipedia.org/wiki/0.0.0.0
_________________ איזי גולדנברג
|
|
חזרה לתוכן הדיון |
|