首頁 > 後端開發 > php教程 > fsockopen() 函數製作連接埠掃描器

fsockopen() 函數製作連接埠掃描器

大家讲道理
發布: 2023-03-15 12:10:01
原創
2085 人瀏覽過


1、前言

本文利用 fsockopen() 函數,寫出一個簡單的連接埠掃描器。

2、關鍵技術

本實例的連接埠號碼是固定的,透過對陣列的遍歷,利用fsockopen() 函數連接,如果連接成功,則該連接埠處於開放狀態,否則該連接埠處於關閉狀態。

核心程式碼如下:

1

2

3

4

5

6

7

8

9

10

foreach ($port as $key => $value) {

    echo '<tr>';

    echo '<td>' $key '</td>';

    echo '<td>' $value '</td>';

    echo '<td>' $msg[$key] . '</td>';    //$errno 和 $errstr 在这里基本用不上,只是为了设置 timeout,防止请求超时

    $fp = @fsockopen($ip$value$errno$errstr, 1);//如果主机(hostname)不可访问,将会抛出一个警告级别(E_WARNING)的错误提示。所有需要加@

    $result $fp '<span style="color:red">开启</span>' '<span style="color:red">关闭</span>';

    echo '<td>' $result '</td>';

    echo '</tr>';

}

登入後複製

3、程式碼如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>端口扫描</title>

    <style type="text/css">

        td{

            padding:10px;

            border-bottom:1px solid #eee;

        }    </style>

</head>

<body>

    <form method="post" action=&#39;#&#39;>

        网址/ip:<input type="text" name="ip" value="<?php echo  $_POST[&#39;ip&#39;] ?? &#39;127.0.0.1&#39;?>">

        <button>扫描</button>

    </form>

    <table>

        <thead>

            <tr>

                <td>id</td>

                <td>端口号</td>

                <td>服务</td>

                <td>开启状态</td>

            </tr>

        </thead>

        <tbody>

            <?php 

                $ip = $_POST[&#39;ip&#39;] ?? &#39;127.0.0.1&#39;;                if(ip2long($ip)){

                    $aIp = explode(&#39;.&#39;, $ip);//ip4地址使用.分隔符                    //这里没有对 0.0.0.0 这种本机地址进行判断,只是粗略的判断ip是否合法

                    foreach ($aIp as $key => $value) {                        if($value < 0 || $value > 255){

                            die('地址不合法');

                        }

                    }

                }

                 

                $port array(                    21, 

                    23, 

                    25,                    79,                    80, 

                    110, 

                    135, 

                    137, 

                    138, 

                    139, 

                    143, 

                    443, 

                    445, 

                    1433, 

                    3306, 

                    3389

                );

                $msg array(                    'Ftp',                    'Telnet',                    'Smtp',                    'Finger',                    'Http',                    'Pop3',                    'Location Service',                    'Netbios-NS',                    'Netbios-DGM',                    'Netbios-SSN',                    'IMAP',                    'Https',                    'Microsoft-DS',                    'MSSQL',                    'MYSQL',                    'Terminal Services'

                );                //无论使用prot还是msg循环都是可以的,因为$key是对应的,都是索引数组

                foreach ($port as $key => $value) {

                    echo '<tr>';

                    echo '<td>' $key '</td>';

                    echo '<td>' $value '</td>';

                    echo '<td>' $msg[$key] . '</td>';                    //$errno 和 $errstr 在这里基本用不上,只是为了设置 timeout,防止请求超时

                    $fp = @fsockopen($ip$value$errno$errstr, 1);//如果主机(hostname)不可访问,将会抛出一个警告级别(E_WARNING)的错误提示。所有需要加@

                    $result $fp '<span style="color:red">开启</span>' '<span style="color:red">关闭</span>';

                    echo '<td>' $result '</td>';

                    echo '</tr>';

                }            ?>

        </tbody>

    </table>

</body>

</html>

登入後複製

4、主要函數介紹

4.1、fsockopen

根據一個主機名稱來建立一個連接,成功返回一個資源對象,失敗返回false;主機不可用是拋出一個警告

詳情參考:http:// php.net/manual/en/function.fsockopen.php

#

以上是fsockopen() 函數製作連接埠掃描器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板