# فناوری جاوا > برنامه‌نویسی جاوا > Java SE : نگارش استاندارد جاوا >  پیدا کردن Ip کامپیوترها

## Ebrahimkh

سلام...


ما در جاوا با چه روشی می تونیم لیست ip های یک شبکه رو پیدا کنیم.../

مثلا من الان تو خونه یه شبکه pan برا خودم با 3 تا کامپیوتر راه اندازی کردم
حالا می خوام با یه برنامه ip اون دو کامپیوتر رو هم در برنامم ببینم 



بازم ممنون

----------


## محمد فدوی

من روشی رو نمیدونم برای این کار... و حدس هم میزنم نشه این کار رو با جاوا انجام داد (چون خیلی وابسته به پلتفرمه)
اگه روشی پیدا کردی که همینجا بگو همه استفاده کنیم. اما اگه نبود به نظرم اینکار رو مثلا توی اوبونتو (و اکثر عرضه های دیگه) میتونی با nmap انجام بدی. معادل ویندوزیش رو دوستان بگن!

----------


## Ebrahimkh

سلام محمد جان داداش با این روش تست کردم یه جورایی جوابم رو داد ولی بازم بدرد بخور نیست 
امیدوارم دوستان جواب بهتری به بنده بدهند




public class Test {

    public static void main(String[] args) {
        
        
        
     
            try {
            Process p=Runtime.getRuntime().exec("arp -a");
                BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
                String s;
                
                while((s=br.readLine())!=null)
                {
                    System.out.println(s);
                }
        } catch (Exception e) {
        }}}

----------


## ahmad.mo74

سلام، کار سختی نیست...تو جاوا هیچی نشد نداره :)

میتونیم از ping استفاده، به این صورت که به تمامی رنج ipهای یک شبکه ping میزنیم...اگر ping داشت یعنی اون ip در حال استفاده است و برعکس...

حالا برای ping زدن من 2 راه بلدم یکی با استفاده از InetAddress و اون یکی هم با استفاده از دستورات cmd

private boolean pingSucceed(String ip) {
        int timeout = 10000;
        try {
            return InetAddress.getByName(ip).isReachable(timeout);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }


private boolean pingSucceed(String ip) {
        try {
            List<String> command = new ArrayList<>();
            command.add("ping");
            command.add(ip);
            ProcessBuilder pb = new ProcessBuilder(command);
            Process process = pb.start();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String s;
            StringBuilder result = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null) {
                result.append(s).append('\n');
                if (s.contains("unreachable")) {
                    break;
                }
            }
            process.waitFor();
            return result.length() > 0 && !String.valueOf(result).contains("unreachable");
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
        return false;
    }

----------


## Ebrahimkh

مرسی داداش ولی ممکنه یکم در مورد این قسمت توضیح دهید
  int timeout = 10000;
براچی هزار ؟؟؟؟
++++++++++++++++++++++++++++
در کل اینجا منظورتان میلی ثانیه هستش درسته ؟؟؟
+++++++++++++++++++++++++++++++

----------------------------------------

در کل یه راهی میخوام که بتونم با ران کردن برنامه در شبکه لیست ip هایی که تو  شبکه مورد نظر هست رو برام پیدا کنه
حالا برنامه من از کجا بدونه که چه ip هایی تو ای شبکه هست یا نیست که بخواد ازش پینگ بگیره ؟؟؟


بازم ممنون بخاطر راهنماییتون

----------


## ahmad.mo74

خواهش میکنم...بله اون millisecond هست و تعیین میکنه که چقدر برای Ping منتظر بمونه و همون 10 ثانیه کافیه (برای اطمینان چون ممکنه نت کند باشه و ping طولانی بشه) ...

شما اول باید ip شبکه رو داشته باشی مثلا 10.128.1.4 حالا باید از 10.128.1.1 تا 10.128.1.254 رو ping بزنی اگر ping داشت یعنی کسی به این ip وصل شده و دوباره از 10.128.2.1 تا 10.128.2.254 و...

البته اینجوری خیلی برنامه کند میشه که باید multi thread بشه مثلا از ExecutorService استفاده کن یا...

برای پیدا کردن ip ایی که بهش وصلی:



public String getMyIP() {
        String result = null;
        Enumeration<NetworkInterface> interfaces = null;
        try {
            interfaces = NetworkInterface.getNetworkInterfaces();
        } catch (SocketException e) {
            e.printStackTrace();
        }
        if (interfaces != null) {
            while (interfaces.hasMoreElements()) {
                NetworkInterface i = interfaces.nextElement();
                Enumeration<InetAddress> addresses = i.getInetAddresses();
                while (addresses.hasMoreElements() && (result == null || result.isEmpty())) {
                    InetAddress address = addresses.nextElement();
                    if (!address.isLoopbackAddress() && address.isSiteLocalAddress()) {
                        result = address.getHostAddress();
                    }
                }
            }
        }
        return result;
    }

----------


## محمد فدوی

کدی که ahmad.mo74 عزیز گذاشتن به نوعی تست کردن هستش که به درد Sniff کردن شبکه میخوره! و فکر نکنم نیت Ebrahimkh این باشه!
پیدا کردن IPهای تخصیص یافته توی شبکه (و احیانا MACهاشون) یه کار روتین هست و با پروتکل ARP انجام میشه. نمیدونم شاید روش مستقیمی برای اینکار توی جاوا هم باشه... ولی من حدس میزنم نباشه!
برای درخواست ARP از Broadcast شبکتون توی سیستم های گنو/لینوکس همونطور که گفتی میتونی از arp با پرچم a- استفاده کنی (اگر nmap رو نصب کنی امکانات بیشتری هم داری):
# arp -a
خروجی یه چیزی مثل این  خواهد بود:

? (192.168.1.50) at 00:11:22:33:44:55 [ether] on wlan0
? (192.168.1.54) at 01:11:22:33:44:55 [ether] on eth0


معادل ویندوزی این دستور هم همین هستش. ولی خروجیش رو نمیدونم چون رو سیستم ویندوز ندارم!

اگر امکانات فراتری مثل Scan کردن و ... رو هم نیاز داری پیشنهاد میکنم خودت دستی این کار رو نکنی (خیلی دردسر داری تا بهترین و سریع کد ممکن رو تولید کنی!) از nmap استفاده کن. توی ویندوز هم میتونی نصبش کنی (تو سایت خودش توضیح داده...) توی اکثر توزیع های لینوکسی هم (اوبونتو، فدورا و OpenSUSE رو مطمینم!) میتونی از توی مخازن خود اون توزیع نصبش کنی.
برای انجام Requestهای ARP و RARP هم میتونی ازش استفاده کنی. اینجا رو ببین.

بهرحال فکر نکنم راه بهتری باشه...

----------


## ahmad.mo74

سلام، من امروز یکم بیکار بودم این برنامه رو براتون نوشتم، ایشالا که کارتونو را بندازه :) ... حالا باز خواستین خودتونم میتونین کاملترش بکنین...

IPScanner با jdk 8u11

----------


## Ebrahimkh

سلام احمد جان 
دست گلت درد نکنه
چقد ظاهر گرافیکیش قشنگ بود
این رو با چه look&feel نوشتی

----------


## ahmad.mo74

سلام، خواهش میکنم...با همون Nimbus نوشتم

----------


## Ebrahimkh

خیلی عالی بود واقعا کار گرفیکیت حرف نداره
برا دکمه ها مثل اینکه دو وضعیت رنگی انتخاب کردی مثلا دکمه run اولش سبز روشنه وقتی روش کلیک می کنیم
تغییر رنگ میده ممکنه یکم در مورد این روش توضیح بدی گه با چه روشی این کار رو انجام دادی



 سپاسگذارم

----------


## ahmad.mo74

کار خاصی نکردم والا :) فقط زمانی که run زده میشه setEnabled رو false میکنم. در ضمن سورس برنامه هم هست میتونین کاملترش بکنین

----------


## Ebrahimkh

آره دیدمش دارم بررسیش می کنم
راستی این کادرهایی که باز میشن رو با چه نوع فرمی طراحی کردی مثل Toast اندرویدن

آخرین سوالم بود  :قلب:

----------


## ahmad.mo74

فقط یه جاش سوتی داده بودم درستش کردم( زمان ping رو درست نمینوشت)، لینکم آپدیت کردم...

کدوم کادرا؟ notification ؟ اونام هم همون JPanel توشه فقط undecorated کردم که هم قشنگتر بشه هم بشه opacity شو تغییر داد واسه محو شدن و...

خواهش میکنم شما 100 تا بپرس ما در خدمتیم  :قلب:

----------


## ahmad.mo74

البته برنامه های از این قشنگ ترم نوشتم :))

----------


## Ebrahimkh

احمد جان داداش برا اسنیف کردن پکتها تو شبکه تا حالا برنامه نوشتی...
من می خوام یه برنامه بنویسم که پکتها رو اسنیف کنه ولی نمیدونم چی بنویسم  :لبخند گشاده!: 

-----------------------------

یه توانایی دیگه که می خوام به برنامم بدم اینه که هر پکتی که وارد سیستمم میشه نشون بده که مربوط به کدوم ip میشه

---------------------


قربونت داداش

----------


## ahmad.mo74

خیلی تو این زمینه ها کد نزدم... این لینکارو یه نگاه بنداز:

http://stackoverflow.com/questions/590510/java-tcp-socket-sniffing

http://stackoverflow.com/questions/3...ively-sniffing

از wireshark خودمم استفاده کردم خوبه

----------


## ahmad.mo74

برنامه رو ردیفش کردم که رو os لینوکسی هم کار کنه  :لبخند گشاده!:  اینم لینک IPScanner

1.PNG2.jpg

----------


## Ebrahimkh

مرسی احمد جان داداش عالی بود

داداش اگه ممکنه یه سری هم به این تاپیک بزن 
https://barnamenevis.org/showthread.p...A8%DA%A9%D9%87

پسر کارت حرف نداره

----------


## ahmad.mo74

سلام، ببخشید دوباره پست رو فعال میکنم، یکی دو روز بیکار بودم گفتم حیفه یکم رو این برنامه کار کنم...خلاصه برنامه خوبی شده اگر دوست داشتید استفاده کنید :) 

IpScanner

----------


## Ebrahimkh

مرسی احمد جان

----------


## dasssnj

> سلام، ببخشید دوباره پست رو فعال میکنم، یکی دو روز بیکار بودم گفتم حیفه یکم رو این برنامه کار کنم...خلاصه برنامه خوبی شده اگر دوست داشتید استفاده کنید :) 
> 
> IpScanner


سلام 
من یه ساله جاوا را برای اندروید یاد گرفتم و با swing هم خوب کنار میامم ولی نمی دونم چرا برنامه هام اون طور که می خوام نمیشه.
شما جاوا را از چه طریقی و در چه مدت یاد گرفتید؟

----------


## ahmad.mo74

سلام، من پارسال خودم کم کم شروع کردم برای JEE هم یه مدت رفتم مجتمع فنی دیگه از اون به بعد هم توی کار یه چیزایی یاد میگیرم... در ضمن port scan هم به برنامه اضافه کردم که دیگه تکمیل بشه

----------

