利用 fsockopen() 函数开放端口扫描器的实例

2025-05-27 0 59

1、前言

本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器

2、关键技术

本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,则该端口处于开放状态,否则该端口处于关闭状态。

核心代码如下:

?

1

2

3

4

5

6

7

8

9

10

11
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 >开启</span>' : '<span >关闭</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

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92
<!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='#'>

网址/ip:<input type="text" name="ip" value="<?php echo $_post['ip'] ?? '127.0.0.1'?>">

<button>扫描</button>

</form>

<table>

<thead>

<tr>

<td>id</td>

<td>端口号</td>

<td>服务</td>

<td>开启状态</td>

</tr>

</thead>

<tbody>

<?php

$ip = $_post['ip'] ?? '127.0.0.1';

if(ip2long($ip)){

$aip = explode('.', $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,

);

$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 >开启</span>' : '<span >关闭</span>';

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

echo '</tr>';

}

?>

</tbody>

</table>

</body>

</html>

?

1
</html> <img php\" id=\"highlighter_532620\">

?

1
因为偷懒,把页面和结果都写在一起了,布局就将就把。

4、主要函数介绍

4.1、fsockopen

根据一个主机名来创建一个连接,成功返回一个资源对象,失败返回false;主机不可用是抛出一个警告

详情参考:http://php.net/manual/en/function.fsockopen.php

利用 fsockopen() 函数开放端口扫描器的实例

以上这篇利用 fsockopen() 函数开放端口扫描器的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/ImCehnyx/archive/2017/08/18/7392605.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 利用 fsockopen() 函数开放端口扫描器的实例 https://www.kuaiidc.com/72133.html

相关文章

发表评论
暂无评论