Jump to content

Search the Community

Showing results for tags 'ip'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • ფორუმი
    • ფორუმი
    • ზოგადი დისკუსიები
    • ტუტორიალი/Tutorial
    • მათემატიკა
    • ბიბლიოთეკა
    • კრიპტოგრაფია
    • კიბერ უსაფრთხოება
    • ელექტროინჟინერია
  • პროგრამები
    • დიზანის & 3D მოდელირება
    • პროგრამები/ software
    • დაცვა
  • Visual Studio
    • Visual Studio
    • C#
    • C და C++
    • ASP.NET/WPF/MVC
    • WCF
    • Quick Basic / Visual Basic
  • Web Development
    • HTML & CSS
    • Bootstrap
    • PHP & MySQL
    • Javascript
    • AngularJS
    • სხვადასხვა
    • SEO
    • ძრავების მიმოხილვა
  • Development
    • JAVA
    • Perl
    • Python
    • ბაზები
    • Other
    • Game Developer
    • მობილურის დეველოპერი
  • IT-Support
    • Unix/Linux
    • MS Windows
    • Apple /MAC
    • Android
    • Network
    • კომპიუტერის არქიტექტურა
  • ყიდვა-გაყიდვა/შეკვეთები
    • ყიდვა-გაყიდვა
    • შეკვეთები

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Website URL


ICQ


Yahoo


Jabber


Skype


ლოკაცია


ინტერესები

Found 6 results

  1. IPB ძრავი და IP მისამართები როგორც ცნობილია, თითოეული ძრავი ინახავს მონაცემებს ბაზაში და მათ შორის IP მისამართებსაც. დღეს შევეცდები აგიხსნათ ის მეთოდი, რომლის საშუალებითაც ცვლილებას შევიტანთ IPB ძრავაში, რათა არ მოხდეს IP მისამართების შენახვა. გვესაჭიროება : 1. IPB ძრავის დაყენება . 2. Database(ჩვენ შემთხვევაში) = MYSQL. 3. OS = Linux. მოდით “უხეშად” გავყოთ IPB ძრავის მუშაობის პრინციპი. ჩვენ გვაქვს ორი ძირითადი ნაწილი. ესენია : IPB ძრავის სკრიპტები(ძირითადად PHP ენაშია დაწერილი) და Database. IPB ძრავის სკრიპტებში არის ფუნქციები, რომლებიც იღებენ, ამუშავებენ და ინახავენ ინფორმაციებს. ისინი ინფორმაციის შესანახად იყენებენ Database-ს. ამ უკანასკნელში კი ინახება ყველა ძირითადი ინფორმაცია(პოსტები, აქტივობები, ცვლილებები და ა.შ.) მათ შორის მომხმარებლის IP მისამართები. იმისათვის, რათა გავიგოთ თუ როდის, რატომ, კონკრეტულად სად ინახავს IP მისამართებს ბაზაში ამისათვის ჩვენ დაგვჭირდება ბაზისთვის თვალის შევლება. ჩვენი მიზანია ბაზიდან მოვიპოვოთ იმ Table-ების სახელები, სადაც ინახებე IP მისამართები. IPB ძრავის შემთხვევაში ესენია : +---------------------------------------+----------------------------+ | TABLE_NAME | COLUMN_NAME | +---------------------------------------+----------------------------+ | admin_login_logs | admin_ip_address | | admin_logs | ip_address | | core_share_links_log | log_ip_address | | core_sys_cp_sessions | session_ip_address | | dnames_change | dname_ip_address | | error_logs | log_ip_address | | forums_archive_posts | archive_ip_address | | members | ip_address | | message_posts | msg_ip_address | | moderator_logs | ip_address | | posts | ip_address | | profile_ratings | rating_ip_address | | rc_comments | ip_address | | sessions | ip_address | | spam_service_log | ip_address | | spider_logs | ip_address | | topic_ratings | rating_ip_address | | upgrade_sessions | session_ip_address | | validating | ip_address | | voters | ip_address | +---------------------------------------+----------------------------+ 20 rows როგორც ჩანს სულ 20 ადგილას ინახავს IPB ძრავი ბაზაში IP მისამართს. ახლა ჩვენ უკვე ვიცით თუ კონკრეტულად სად ინახავს IP მისამართებს IPB ძრავი. ახლა ჩვენი მიზანია მოვძებნოთ IPB სკრიპტებში ის ფრაგმენტები, რომლებიც DB-ის ამ Table-ებში ინახავენ ინფორმაციებს. OS Linux-ის შემთხვევაში ამ ფრაგმენტების პოვნა გაცილებით ადვილია, ამისათვის უნდა გადავიდეთ იმ საქაღალდეში, სადაც მოთავსებულია ჩვენი IPB ძრავი( მაგალითად : /var/www/html/) და grep(ან sed ან სხვა) ტერმინალური პროგრამის საშუალებით დავასკანირებთ ყველა საქაღალდებს თავიანთი ქვესაქაღალდეებით. მაგალითად - ls -l | grep -r 'posts' >> ../Posts ბრძანების საშუალებით ჩვენ ვიპოვით ყველა იმ ფაილს, რომელშიც სიტყვა post არის ჩაწერილი. ამ ინფორმაციას კი შეინახავს Posts ფაილში, რომელიც შეიქმნება ჩვენი საქაღალდის “ზე/წინა/დედა/საქაღალდეში”. თუ ცოტა PHP ენასაც გადავხედავთ, დავინახავთ, რომ PHP ბაზაში ინფორმაციას ძირითადად ინახავს შემდეგი ბრძანებების საშუალებით : INSERT ან UPDATE. ახლა კი კიდევ გავფილტროთ ჩვენი Posts ფაილი შემდეგი ბრძანებით : ბრძანება - cd .. && ls -l | grep -r 'insert' ./Posts >> PostAndInsert ამ ბრძანების საშუალებით მივიღებთ ფაილს PostAndInsert, რომლის გახსნის შემთხვევაშიც დავინახავთ ფაილების მისამართებს სადაც წერია insert და post სიტყვა ერთ ხაზზე. ან სულაც პირიქით, ჯერ გავფილტროთ ყველა ის ხაზი სადაც წერია insert (ls -l | grep -r 'posts' >> ../insert), ხოლო შემდგომ თითოეული Tables-სთვის გავფილტროთ(cd .. && ls -l | grep -r 'post' ./insert >> PostAndInsert). ასეთი მეთოდის საშუალებით ჩვენ შევძლებთ სწრაფად ვიპოვოთ ის ფაილები, რომლებსაც შეაქვთ ცვლილებები ბაზაში და ინახავენ IP მისამართებს. ახლა კი უბრალოდ მოგვიწევს თითოელი ფაილის გახსნა დათვალიერება და პოვნა კოდის იმ ფრაგმენტებისა, რომლებიც ინახავენ IP მისამართებს. მმაგალითად, ჩვენთვის საინტერესოა შემდეგი “admin/applications/forums/sources/classes/post/classPost.php” ფაილი. ჩვენ ვიცით, რომ ფაილში აუცილებლად იქნება კოდი, რომელიც იმოქმედებს ბაზის posts'ის Table-ზე. ხოლო ჩვენ შევეცდებით კოდს მუშაობაში ხელი არ შევუშალოთ ანუ არ დავაზიანოთ და შევცვალოთ ip_address-ის მონაცემი. ძირითადად კი მოგვიწევს იმ ხაზების რედაქტირება, რომელიც IP მისამართებს ეხება. მაგალითად : 'ip_address' => $this->member->ip_address, ამ კოდის საშუალებით ip_address მიენიჭება $this->member->ip_address-ის მნიშვნელობა(მომხმარებლის IP მისამართი), ხოლო ჩვენ კი შევცვლით შემდეგი კოდით - 'ip_address' => "666.666.666.666", რითაც ip_address-ს მივანიჭებთ შემდეგ მნიშვნელობას -"666.666.666.666". ამრიგად, ბაზაში არა ნამდვილი, არამედ გაყალბებული ინფორმაცია შეინახება. ახლა კი შევეცდები ცოტა ხელი მოგიმართოთ და მიგითითოთ თუ რა ცვლილებები უნდა შეიტანოთ იმისათვის, რათა გააყალბოთ IP მისამართები. მონაცემებს მოგაწვდით შემდეგი სახით : NUM. | Table_name | Column_name | File Location = *** File Name = *** Edit : line NUM : "არის" />> "უნდა იყოს" // კომენტარი SQL : SQL ბრძანება შედეგის შესამოწმებლად * შენიშვნა როდესაც ცვლილებებს შეიტანთ, არ დაგავიწყდეთ სერვერის გადატრვირთვა და მონაცემთა ბაზის შემოწმება. 1. | admin_login_logs | admin_ip_address | File Location = admin/applications/core/modules_admin/login File Name = manualResolver.php Edit : line 446 : $this->member->ip_address />> "666.666.666.666", // admin_login_logs SQL : Select admin_ip_address from admin_login_logs; * თუ კონტროლ პანელში არ შეგიშვებთ, მაშინ შეცვალეთ initdata.php - line 303 : define( 'IPB_ACP_IP_MATCH', 1 ); />> define( 'IPB_ACP_IP_MATCH', 0 ); 2. | admin_logs | ip_address | File Location = admin/sources/classes File Name = class_admin_functions.php Edit : line 271 : $this->member->ip_address />> "666.666.666.666", // admin_logs SQL : Select * from admin_logs; 3. | core_share_links_log | log_ip_address | File Location = admin/sources/classes/share File Name = links.php Edit: line 269 : $this->member->ip_address />> "666.666.666.666", // core_share_links_log SQL : select log_ip_address from core_share_links_log; 4. | core_sys_cp_sessions | session_ip_address | File Location = admin/applications/core/modules_admin/login File Name = manualResolver.php Edit : line 236 >> $this->member->ip_address />> "666.666.666.666"", // core_sys_cp_sessions SQL : Select admin_ip_address from admin_login_logs; 5. | dnames_change | dname_ip_address | File Location = admin/sources/classes/member File Name = memberFunctions.php Edit: line 126 : $member['ip_address'] />> "666.666.666.666", // dnames_change SQL : select dname_ip_address from dnames_change; 6. | error_logs | log_ip_address | File Location = admin/sources/classes/output File Name = publicOutput.php Edit: line 3890 : $this->member->ip_address />> "666.666.666.666", // error_logs line 3935 : $this->member->ip_address />> "666.666.666.666", // error_logs SQL : select log_ip_address from error_logs; 7. | forums_archive_posts | archive_ip_address | File Location = admin/sources/classes/archive File Name = writer.php Edit: line 573 >> $post['ip_address'] />> "666.666.666.666", // not necessary it copys post's ip... SQL : select archive_ip_address from forums_archive_posts; 8&19.| members | ip_address | Register : File Location = admin/applications/core/modules_public/global File Name = register.php Edit : line 864 : $member['ip_address'] />> "666.666.666.666", // validating || Did we put them in validating? line 882 : $tmp_member['ip_address'] />> "666.666.666.666", /* Send out notification */ line 932 : $member['ip_address'], />> "666.666.666.666", // validating || insert ins Validating Table - DB line 1265: $this->member->ip_address, />> "666.666.666.666", // revalidate line 1856: $this->member->ip_address, />> "666.666.666.666", // Create Member line 1918: $this->member->ip_address, />> "666.666.666.666", // Create Account line 1958: $member['ip_address'], />> "666.666.666.666", // validating line 1999: $member['ip_address'], />> "666.666.666.666", // send new registration email if the member wasn't banned line 2036: $member['ip_address'], />> "666.666.666.666", // send new registration email if the member wasn't banned line 2077: $member['ip_address'] />> "666.666.666.666". // validating || This is a COPPA user, so lets tell them they registered OK and redirect to the form. SQL : Select ip_address from validating; SQL : Select ip_address from members; 9. | message_posts | msg_ip_address | File Location = /admin/applications/members/sources/classes/messaging File Name = messengerFunctions.php Edit : line 1416 : $this->member->ip_address />> "666.666.666.666" // message_posts || Add the post line 1784 : $this->member->ip_address />> "666.666.666.666" // message_posts || Update Posts line 1829 : $this->member->ip_address />> "666.666.666.666" // message_posts || Insert new SQL : Select msg_ip_address from message_posts; 10. | moderator_logs | ip_address | File Location = admin/applications/forums/sources/classes/post File Name = classPost.php Edit : line 2147 : $this->ip_address />> "666.666.666.666", // moderator_logs || Update poll line 2181 : $this->ip_address />> "666.666.666.666", // moderator_logs || Update poll line 2247 : $this->ip_address />> "666.666.666.666", // moderator_logs || Update topic title line 3252 : $this->member->ip_address />> "666.666.666.666", // moderator_logs SQL : Select ip_address from moderator_logs; File Location = admin/applications/forums/sources/classes/post File Name = topics.php Edit : line 1170 : $this->member->ip_address />> "666.666.666.666", // moderator_logs || Update topic title SQL : Select ip_address from moderator_logs; File Location = admin/applications/forums/sources/classes File Name = moderate.php Edit : line 2098 : $this->member->ip_address />> "666.666.666.666", // moderator_logs || Update topic title SQL : Select ip_address from moderator_logs; 11. | posts | ip_address | File Location = admin/applications/forums/sources/classes/post File Name = classPost.php Edit : line 2019 : $this->_originalPost['ip_address'] />> "666.666.666.666" // posts || function editPost()... line 3163 : $this->member->ip_address, />> "666.666.666.666" // bw_post_from_mobile || function compilePostData() SQL : Select ip_address from posts; 12. | profile_ratings | rating_ip_address | File Location = admin/applications/members/modules_public/ajax File Name = rate.php Edit : line 129 : $this->member->ip_address />> "666.666.666.666" // profile_ratings || NEW RATING! SQL : Select rating_ip_address from profile_ratings ; 13. | rc_comments | ip_address | File Location = admin/sources/classes/comments File Name = bootstrap.php Edit : line 883 : $this->member->ip_address />> "666.666.666.666", // rc_comments || Comment SQL : Select ip_address from rc_comments; 14. | sessions | ip_address | browser | File Location = admin/sources/classes/session File Name = publicSessions.php Edit: line 955 : $this->_member->ip_address, />> "666.666.666.666", // for IP line 1147 : $this->_member->ip_address, />> "666.666.666.666", // for IP line 738 : 'uagent_key' => $uAgent['uagent_key'], />> 'uagent_key' => "firefox", // Set up data line 739 : 'uagent_version' => $uAgent['uagent_version'], />> 'uagent_version' => "31", // Set up data line 853 : 'uagent_key' => $uAgent['uagent_key'], />> 'uagent_key' => "firefox", line 854 : 'uagent_version' => $uAgent['uagent_version'], />> 'uagent_version' => "31", line 956 : 'browser' => $this->_userAgent, />> 'browser' => "Mozilla/5.0 (Windows NT 6.1; rv:31.0) Gecko/20100101 Firefox/31.0", // For DB line 967 : 'uagent_key' => $uAgent['uagent_key'], />> 'uagent_key' => "firefox", // for DB line 968 : 'uagent_version' => $uAgent['uagent_version'], />> 'uagent_version' => "31", //for DB line 1159 : 'uagent_key' => $uAgent['uagent_key'], />> 'uagent_key' => "firefox", // for the new session line 1160 : 'uagent_version' => $uAgent['uagent_version'], />> 'uagent_version' => "31", // for the new session SQL : select * from sessions; 15. | spam_service_log | ip_address | File Location = admin/sources/base File Name = ipsMember.php Edit: line 4105 : $ip />> "666.666.666.666" // spam_service_log SQL : select ip_address from spam_service_log; 16. | spider_logs | ip_address | File Location = admin/sources/base File Name = ipsRegistry.php Edit : line 4053 : self::instance()->ip_address />> "666.666.666.666", // topic_ratings || NEW RATING! SQL : Select ip_address from spider_logs; 17. | topic_ratings | rating_ip_address | File Location = admin/applications/forums/modules_public/ajax File Name = topics.php Edit : line 1067 : $this->member->ip_address />> "666.666.666.666" // topic_ratings || NEW RATING! SQL : Select rating_ip_address from topic_ratings; 18. | upgrade_sessions | session_ip_address | File Location = admin/setup/sources/classes/session File Name = sessions.php Edit: line 212 : self::instance()->ip_address, />> "666.666.666.666", SQL : select * from upgrade_sessions ; 19. | validating | ip_address | File Location = admin/applications/core/modules_public/global File Name = lostpass.php Edit : line 355 : $this->member->ip_address, />> "666.666.666.666", // validating || for Lost Password Base line 374 : $this->member->ip_address, />> "666.666.666.666", // validating || for Lost Password Email SQL : Select ip_address from validating; 20. | voters | ip_address | File Location = admin/applications/forums/modules_public/extras File Name = vote.php Edit : line 235 : $this->member->ip_address />> "666.666.666.666", // voters || Add voter line 294 : $this->member->ip_address />> "666.666.666.666", // voters || Add null vote SQL : Select ip_address from voters; Other : File Location = admin/applications/members/modules_admin/members File Name = members.php Edit : line 774 : IPSMember::findIPAddresses( $member['member_id'] ); />> "888.888.888.888"; // not to ban IP(666.666.666.666); line 1544 : $this->member->ip_address />> "666.666.666.666" line 1565 : $this->member->ip_address />> "666.666.666.666" File Location = admin/sources/base File Name = ipsMember.php Edit: line 4397 : $member['ip_address'] />> "666.666.666.666", ეს არაა სრულყოფილი და ზუსტი ჩამონათვალი, ამიტომ კარგი იქნება თუ თქვენც მოძებნით, შეადარებთ და უზუსტობის/გამორჩენის შემთხვევაში შემატყობინებთ. მე მოვიყვანე მაგალითი IPB ძრავაზე, თუმცა სხვა ძრავებზეც შეგიძლიათ გამოიყენოთ ეს მეთოდი. გმადლობთ ყურადღებისთვის. @Scripts.GE
  2. nikolozi

    ip

    გამარჯობა, თუ ვინმეს გარე იპ მაქ რა შემილია რომ გავაკეთო ? ან საერთოდ შესადზლებელია რამე რომ გავაკეთო თუ იცით რა დაწერეთ როგორ მაიტერესებს.
  3. მაშ ასე, გადავქექე მთელი ინტერნეტი, მაგრამ მომუშავე ქართული ენის პაკეტი IP board 3.4.5-თვის ვერ ვიპოვე, ამიტო გადავწყვიტე, რომ მე თვითონ გადამეთარგმნა. IPS forums-სა და IPS members-ს გარდა, ასევე გადათარგმნილია შემდეგი აპლიკაციები (ჰუკები): 1. Questions 1.0.0; 2. IPB Shoutbox 1.4.1; 3. FAQ System 2.0.3; 4. Auto Welcome Members 2.3.0; 5. Friends Online; 6. Members Online Today. ვინც არ იცით თუ როგორ დააყენოთ ქართული ენის პაკეტი, გახსენით სპოილერი: PS. გადათარგმნილია მთელი ნაწილი ადმინისტრატორისთვის განკუთვნილი ტექსტების გარდა. ფაილის გადმოწერა ან http://www.mediafire.com/download/7lbfk072cfcapm2/language.xml.gz ასევე, გადმოწერის შემდეგ ფაილი პირდაპირ ატვირთეთ არქივის მოხსნის გარეშე, წინააღმდეგ შემთხვევაში ენის პაკეტი ვერ დაყენდება!
  4. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Net; using System.IO; namespace MyProject { class Program_Public_and_Private_IP_Address { static void Main(string[] args) { GetPrivateIP(); GetPublicIP(); } static void GetPrivateIP() { NetworkInterface.GetAllNetworkInterfaces().ToList(). ForEach(ni => ni.GetIPProperties().UnicastAddresses.ToList(). ForEach(ua => { if (ua.Address.AddressFamily == AddressFamily.InterNetwork) { Console.WriteLine("Private IP: {0}", ua.Address.ToString()); } })); } static void GetPublicIP() { string address = ""; WebRequest request = WebRequest.Create("http://checkip.dyndns.org"); using(WebResponse response = request.GetResponse()) using (StreamReader sr = new StreamReader(response.GetResponseStream())) { address = sr.ReadToEnd(); } int first = address.IndexOf("Address: ") + 9; int last = address.LastIndexOf("</body>"); address = address.Substring(first, last - first); Console.WriteLine("Public IP: {0}", address); } } }
  5. RoBBeR

    IP ადრესაცია

    1.2.1. შესავალი თუ დღევანდელი კომპიუტერული ქსელების სურათს ძალიან გავამარტივებთ და გავაფორმალურებთ, მათ შემადგენელი კომპონენტები შეგვიძლია სამ ნაწილად დავყოთ: ჰოსტები, კვანძები და შემაერთებელი გარემო (media). ჰოსთი – ესაა ქსელის კომპონენტი, რომელიც “ამჩნევს” და ამუშავებს მხოლოდ მისთვის განკუთვნილ ინფორმაციას (კომპიუტერი, ლეპტოპი,პრინტერი და ა.შ.) კვანძი არის ქსელის კომპონენტი, რომლის ამოცანაა ჰოსთებისთვის ან სხვა კვანძებისთვის განკუთვნილი ინფორმაციის დამუშავება, ორგანიძება, გადამისამართება და ა.შ. (ჰაბი, სვიჩი, როუტერი და ა.შ.) მედია – ესაა გარემო რომელშიც სიგნალი ვრცელდება (მავთული, ელექტრომაგნიტური ტალღები და ა.შ.). ეს არის ის რითაც ჰოსთები და კვანძები უკავშირდებიან ერთმანეთს. ყველა შემთხვევაში, ინფორმაციის გადაცემის პროცესის საწყისი და საბოლოო წერტილი არის ჰოსთი. ჰოსთების ცალსახა ინდენტიფიკაციისთვის საჭიროა მათი ადრესაცია. სხვადასხვა პროტოკოლები, მათი მიზნების შესაბამისად შეიძლება ადრესაციის სხვადასხვა მექანიზმს იყენებდნენ. ჩვენ განვიხილავთ IP პროტოკოლს და კერძოდ მე-4-ე ვერსიას, შესაბამისად ამ ვერსიაში არსებულ ადრესაციის მექანიზმს. IPv4 პროტოკოლის მიხედვით, IP მისამართი არის 32 ბიტიანი რიცხვი. შესაბამისად უმცირესი IP-მისამართია: 000000000000000000000000000000002=010 ხოლო უდიდესი IP-მისამართია: 111111111111111111111111111111112=429496729510 შესაბამისად დედამიწაზე იყო დრო როდესაც ეგონათ, რომ 4 მილიარდ “ს ჩემტა” აიპი მისამართი სრულიად საკმარისი იყო კაცობრიობის მოთხოვნებისთვის. ამ დრომ დიდი ხანია ჩაიარა და არსებობს IPv6 სტანდარტი, სადაც ეს და სხვა პრობლემაა მოხსნილი, მაგრამ ეს სხვა საუბრუს თემაა. 1.2.2. წერტილოვანი ათობითი წარმოდგენა. ამგვარად IP მისამართი წარმოადგენს რიცხვის 0-დან 4294967295-მდე. ასეთი სახით მისამართებთან მუშაობა მოუხერხებელია, ამიტომ გამოიყენება ე.წ. წერტილოვანი ათობითი წარმოდგენა (Dotted Decimal notation). მისი შინაარსი რომ გავიგოთ ისევ IP მისამართის ორობით ჩანაწერს უნდა მივმართოთ, როგორც ვთქვით IP მისამართი არის : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx სახის რიცხვი (ორობითში). აქ 32 ცალი x წერია და თითოეული შეიძლება იღებდეს მნიშვნელობას ან 0 ან 1. დავყოთ ეს 32 ბიტი ბაიტებად (ან ოქტეტებად): xxxxxxxx . xxxxxxxx . xxxxxxxx . xxxxxxxx ოქტეტებს შევხედოთ როგორც ცალკე რიცხვს ისე: თითოეულმა ოქტეტმა შეიძლება მიიღოს მინიმალური მნიშვნელობა როცა ყველა x=0 ანუ 00000000002=010, და მაქსიმალური მნიშვნელობა როცა ყველა x=1 ანუ 111111112=25510. ამის მერე წინა ნაწილში ჩამოყალიბებული განმარტება IP მისამართისა, შეიძლება შემდეგნაერად ჩამოყალიბდეს : IP მისამართი ქვია A,B,C,D ტიპის ჩანაწერებს, სადაც A, B, C და D რიცხვები შეიძლება ღებულობდნენ მნიშვნელობებს 0-დან 255-მდე. ამგვარად ჩანაწერები 1.2.3.4 ან 100.100.100.100 ან 123.231.56.71 ან 255.255.255.255 წარმოადგენენ IP მისამართებს, ხოლო შემდეგი ჩანაწერები 255.255.255.256 უკვე აღარაა IP მისამართი. 1.2.3 კლასები. იმის მიხედვით თუ რა მნიშვნელობა გააჩნია ორივე ოქეტს, IP მისამართები იყოფა კლასებად. დაყოფას მკაცრი მეთამატიკური საფუძველი აქვს მაგრამ ეს ორობითი გამოთვლების ჩატარებას მოითხოვს, ამიტომ უბრალოდ ჩამოვთვალოთ IP მისამართების კლასები : მოვიყვანოთ რამოდენიმე მაგალითი : A კლასი: 10.10.10.1 , 50.255.255.255 , 125.250.125.250. B კლასი: 128.0.01 , 172.20.10.1 , 192.255.255.255. C კლასი: 192.168.1.1 , 200.200.200.200 , 223.0.0.1. 1.2.3. მასკა. წარმოვიდგინოთ 10000 ჯარისკაცისგან შემდგარი ბრიგადა. ყველა ჯარისკაცს აქვს პირადი ნომერი 0000-დან 9999-მდე. ბრიგადის წინაშე დასმული ამოცანის მიხედვით პერიოდულად საჭიროა მისი შემადგენლობის, სხვადასხვა მასშტაბის მხირე ჯგუფებად დანაწილება. აქ ძალიან მოსახერხებელია სულ მცირე მათემატიკის მოშველიება. მაგალითად თუ გვინდა ბრიგადის ათასეულებად დაყოფა – მაშინ შეგვიძლია ერთიდაიგივე ათასეულში გავამწესოთ მხოლოდ ის ჯარისკაცები რომლებსაც პირადი ნომრის პირველი ციფრი აქვთ საერთო. ანუ ამ შემთხვევაში ერთ ჯგუფში (ათასეულში) აღმოჩნდება ყვე ჯარისკაცი 0000 დან 0999 ნომრის ჩათვლით, მეორეში ყველა 1000-დან 1999-ის ჩათვლით და ა.შ. მეათე და ბოლოში ყველა 9000-დან 9999-ის ჩათვლით. სიმოკლისთვის შეიძლება ვილაპარაკოთ რომ ვიყენებთ /1 დაყოფას (ნიშნავს ნომრის პირველი ციფრი უცვლელია იგი განსაზღვრავს ჯგუფის ნომერს, ანუ ჯარისკაცი 1234 არის პირველი ათასეულის 234-ე ჯარისკაცი) თუ გვინდა ბრიგადის ასეულებად დაყოფა მაშინ უცვლელს ვტოვებთ პირველ ორ ციფრს ანუ სულ პირველი ასეული იქნება: 0000-0099, მეორე 0100-0199, მესამე 0200-0299 და ა.შ. მეასე და ბოლო: 9900-9999, ამჯერად ვიტყვით რომ ვიყენებთ /2 მასკით დაყოფას (ნომრის პირველი ორი ციფრი უცვლელია და იგი განსაზღვრავს ჯგუფის ნომერს, ანუ ჯარისკაცი 1234 არის მე-12-ე ასეულის 34-ე ჯარისკაცი) თუ გვინდა ბრიგადის ათეულებად დაყოფა მაშინ ვტოვებთ პირველ სამ ციფრს ანუ სულ პირველი ათეული იქნება: 0000-0009, მეორე 0010-0019, მესამე 0020-0029 და ა.შ. მეათასე და ბოლო: 9990-9999. ვამბობთ რომ ვიყენებთ /3 მასკით დაყოფას (ნომრის პირველი სამი ციფრი უცვლელია იდი განსაზღვრავს ჯგუფის ნომერს, ანუ ჯარისკაცი 1234 არის 123-ე ათეულის მე-4-ე ჯარისკაცი) ახლა მთელი ეს მსჯელობა ადვილი გადასატანია IP მისამართებზე, რომელიც ასევე 4 ნიშნა (4 ოქტეტიანია). ოღონდ აქ თუ პირველი ოქტეტი მიუთითებს ჯგუფის ნომერს (რომელსაც აქ საბნეტი ქვია) ვწერთ არა /1 არამედ /8 (პირველი 8 ბიტი), თუ პირველი 2 ოქტეტი მაშინ /16, თუ პირველი 3 ოქტეტი მაშინ /24. თავდაპირველი გადაწყვეტილების მიხედვით A კლასში გამოიყენებოდა /8 მასკა, B კლასში /16 ხოლო C კლასში /24. შემდეგ ეს წესი შეიცვალა, ამიტომ ახლა ვამბობთ ტომ ეს მოცემული კლასის შესაბამისი დეფაულთ მასკებია. მაგალითები: 10.0.0.0 /8 მისამართში ქსელური ნაწილია 10 დანარჩენი ნომრავს ჰოსთს, ამ ქსელს ეკუთვნის ყველა მისამართი 10.0.01-დან 10.255.255.255-მდე. 172.16.0.0 /16 მისამართში ქსელური ნაწილია 172.16 დანარჩენი ნომრავს ჰოსთს, ამ ქსელს ეკუთვნის ყველა მისამართი 172.16.0.1-დან 172.16.255.255-მდე. 192.168.0.0 /24 მისამართში ქსელური ნაწილია 192.168.0 დანარჩენი ნომრავს ჰოსთს, ამ ქსელს ეკუთვნის ყველა მისამართი 192.168.0.1-დან 192.168.0.255-მდე. 1.2.4 VLSM. დიდი ხანია ასეთი მარტივი დაყოფა აღარ გამოიყენება გარკვეული მიზეზების გამო. მასკას უკვე ნებისმიერი მნიშვნელობა შეიძლება ქონდეს /8-/30 ინტერვალში, შინაარსი იგივეა /n მასკა ნიშნავს, რომ პირველი n ბიტი აღნიშნავს ქსელს, დანარჩენი 32-n კი ჰოსთს. ამ შემთხვევაში გამოთვლები ცოტათი რთულდება, ვინაიდან ორობითის მოშველიება ხდება საჭირო. მოკლედ ნებისმიერი მასკა საბნეტს განსაზღვრავს ცალსახად, განსაზღვრავს თუ საიდან იწყება იგი და სად მთავრდება. IP პროტოკოლის მიხედვით დასაწყისი და ბოლო მისამართები დარეზერვებულია სპეციალური მიზნებისთვის და მათი გაწერა ჰოსთების ინტერფეისებზე შეუძლებელია: ყველაზე დაბალს Net IP (ქსელის აიპი) ქვია, ყველაზე მარალს ბროუდქასთი. ახლა ვნახოთ თუ როგორ ითვლება: ქსელის ნომერი, ბროუდქასთი და რეინჯი. ქსელის ნომერი მიიღება აიპი მისამართიდან თუ მისი ჰოსთის შესაბამის ბიტებს გავანოლებთ, ხოლო ბროუდქასთი მიიღება თუ მისი ჰოსთის შესაბამის ბიტებს ერთიანებით შევცვლით: მაგალითად ვიპოვოთ 210.17.23.200 /27 მისამართის ქსელური ნომერი და ბროუდქასთი: გადავიყვანოთ 210.17.23.200 მისამართი ორობითში 11010010.00010001.00010111.11001000 ვინაიდან მასკაა /27 ეს ნიშნავს რომ აქ 27 ბიტი ქსელის ნომერია დავტოვოთ ისინი და დანარჩენი გავანოლოთ : 11010010.00010001.00010111.11000000 ესაა ქსელის ნოემრი მოცემული აიპისთვის, გადავიყვანოთ ეხლა ეს ისევ ათობითში, მივიღებთ: 210.17.23.192 ამგვარად 210.17.23.200 /27 მისამართი არის 210.17.23.192 /27 საბნეტში. ახლა გავიგოთ ბროუდქასთი: ამისთვის აიპში ჰოსთის შესაბამის ბიტებს ვცვლით 1-იანებით: 11010010.00010001.00010111.11011111 გადავიყვანოთ ახლა ეს ათობითში: 210.17.23.223 ამგვარად: 210.17.23.200 /27 აიპი მისამართი ეკუთვნის 210.17.23.192 /27 საბნეტს რომლის ბროუდქასთია 210.17.23.223. მათ შორის მოქცეული აიპები კი იქნება დასაშვები მისამართების რეინჯი მოცემული საბნეტისა: 210.17.23.192 – 210.17.23.223 სტატიის ავტორი : RoBBeR
  6. ანდროიდის სისტემის ტელეფონებისთვის არსებობს პროგრამა IP Webcam, რომლის საშუალებითაც ვებ ბრაუზერში, კონკრეტულ მისამართზე, შეგვიძლია ვნახოთ ის, რასაც ჩვენი ტელეფონი ხედავს. ინფორმაცია გადაიცემა სურათების სახით: აქედან გამომდინარე ვებბრაუზერ კომპონენტის დახმარებით მარტივად შეიძლება დაიწეროს პროგრამა რომელიც ამ ვიდეოს კომპიუტერში გვიჩვენებს. დავიწყოთ: ამ პროგრამისთვის დაგვჭირდება: 1 webBrowser, 3 Button, 3 label, 1, textbox, 1 picturebox, 1 timer. დააგდეთ 1 webBrowser ფორმაზე და visible თვისება დაუყენეთ false-ზე (არ გვჭირდება რომ ეს ბრაუზერი ჩანდეს). შემდეგ დააგდეთ 1 picturebox, 1 timer და 3 Button. ღილაკებს სახელები შეუცვალეთ, შესაბამისად: btnConnect, btnStart, btnStop. მერე დააგდეთ 3 label, ერთი სტატუსისთვის გვჭირდება, ამიტომ ტექსტი საერთოდ წაუშალეთ, ხოლო სახელად დაარქვით lblStatus, დანარჩენი ორიდან ერთს ტექსტში დაუწერეთ "IP Address : Port", ხოლო მეორეს status და დააყენეთ lblStatus-ის წინ. ფორმას მოვრჩით. ახლა კოდზე გადავიდეთ: ქონექშენის თაიმაუთისთვის გვჭირდება ერთი თაიმერი, რომელიც რეაგირებას მოახდენს 8 წამში, ამიტომაც სულ ზემოთ დაუმატეთ დირექტივა using System.Timers; ხოლო ინიციალიზაციის მეთოდის ქვემოთ კი: //timer for timeout System.Timers.Timer timer = new System.Timers.Timer(8000); ახლა გვჭირდება ვებბრაუზერის ორი ივენთი, webBrowser1_Navigating და webBrowser1_Navigated, რომ ვიცოდეთ სად ვართ. private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) { lblStatus.Text = "Please Wait..."; btnStart.Enabled = false; } private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) { lblStatus.Text = "You can start now..."; btnStart.Enabled = true; timer.Stop(); } აქ მეორე მეთოდში, ტაიმერი ითიშება თუ დაკავშირება წარმატებით განხორციელდა, ხოლო თუ არ განხორციელდა წარმატებით... მაგას ქვემოთ ვნახავთ. მე ერთნაირი კონტროლები ერთად მილაგია (კოდზე ვამბობ), ამიტომაც ახლა მეთოდები შეგვხვდება, რომელთაც ქვემოთ მივუბრუნდებით. გადავიდეთ ღილაკებზე. პირველი არის დაკავშირების ღილაკი: //btnConnect private void btnConnect_Click(object sender, EventArgs e) { timer.Start(); try { webBrowser1.Navigate("http://" + tbIpPort.Text + "/js.html"); timer.Elapsed += new ElapsedEventHandler(tmr_Elapsed); } catch { MessageBox.Show("Could not connect. Check if your app is runningnand IP and Port are correct", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } ვრთავთ ტაიმერს და იწყება დროის ათვლა. ლინკი რომელიც გვიჩვენებს ვიდეოს არის ეს: "http://ip:port/js.html". სწორედ ამიტომ გვაქვს ტექსტბოქსი, სადაც აიპი და პორტი იწერება ორწერტილით გაყოფილი. შემდეგ ხდება ტაიმერის გასულ დროზე რეაგირება და 8 წამი ისე გავიდა რომ ვერ დავუკავშირდით გვერდს ერორს ამოაგდებს. ამ რეაგირების მეთოდს მალე ვიხილავთ. დაწყების ღილაკის კოდი ასეთია: //btnStart private void btnStart_Click(object sender, EventArgs e) { timer1.Start(); lblStatus.Text = "Streaming started..."; btnStop.Enabled = true; btnStart.Enabled = false; btnConnect.Enabled = false; } ეს ტაიმერი, სულ სხვაა, კერძოდ ფორმაზე რომ დავაგდეთ ის. სტატუსის ტექსტს ვააფდეითებთ და ღილაკებს ვთიშავთ და ვრთავთ, იმის მიხედვით როგორც საჭიროა. გაჩერების ღილაკი: //btnStop private void btnStop_Click(object sender, EventArgs e) { timer1.Stop(); pictureBox1.ImageLocation = ""; lblStatus.Text = "Streaming stopped..."; btnStart.Enabled = true; btnStop.Enabled = false; } აქ დროს ვაჩერებთ და დანარჩენი ისე ვაკეთებთ როგორც წინა ღილაკზე. ახლა მთავარი. ჩვენი ტაიმერის Tick ივენთი: //timer1_Tick for picturebox updating private void timer1_Tick(object sender, EventArgs e) { try { pictureBox1.ImageLocation = webBrowser1.Document.GetElementById("img1") .GetAttribute("src"); } catch { timer1.Stop(); lblStatus.Text = "Error in connection!"; MessageBox.Show("Something went wrong.nReload app", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } pictureBox1-ში სურათები რომ გამოვიტანოთ, ან პირდაპირ სურათი უნდა მივუთითოთ, ან მისი მისამართი. ჩვენ ვიცით მისამართი, ამასთან სურათის სახელები მუდმივად იცვლება რენდომით. თუმცა ვიცით რომ აიდი არის "img1", ხოლო სურათის მისამართი წერია "src"-ში. ამის ცოდნა საკმარისია იმისთვის რომ სურათები გადმოვიტანოთ, თუმცა ის მუდმივად ახლდებად ა ჩვენც მუდმივად უნდა განვაახლოთ ლინკი, სწორედ ამიტომ გვაქვს ეს ყველაფერი timer1_Tick ივენთში. სხვათაშორის, აჯობებს timer1-ის ინტერვალი 50-ზე ან ცოტა ნაკლებზე დააყენოთ, რადგან დეფოლტად 100-ზეა და ცოტა აგვიანებს ხოლმე. თუ სურათების გადმოტანა არ ხერხდება ვთიშავთ ამ ტაიმერს და გამოგვაქვს მესიჯი. და ბოლოს ჩვენი 8 წამიანი ტაიმერის ივენთჰენდლერი (ქართულად რა ქვია დამავიწყდა): //timer.Elapsed EventHandler void timer_Elapsed(object sender, ElapsedEventArgs e) { MessageBox.Show("Connection timed out. Check if your app is runningnand IP and Port are correct", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); timer.Stop(); } თუ 8 წამი ისე გავიდა, რომ ლინკთან დაკავშირება ვერ მოხდა, გამოდის, რომ ან ტელეფონზე არ არის ჩართული აპლიკაცია და ინტერნეტი თავისთავად, ან კიდევ აიპი და პორტია არასწორად მითითებული, ამიტომ ვაგდებთ შესაბამის შეტყობინებას და ვაჩერებთ 8 წამიან ტაიმერს. ესეც სრული კოდი:
×