PHP 网络

1 DNS、服务器和服务
1.1 DNS
1) 检查DNS记录是否存在
int checkdnsrr(string host [, string type]) 通常基于host值和可选的DNS资源记录type来检查DNS记录。
可能的资源类型:

A IPv4地址记录。
AAAA IPv6地址记录
A6 IPv6地址记录
ANY 查找任意类型的记录
CNAME 别名记录
MX 邮件交换记录
NAPTR 命名授权指针
NS 域名服务器记录
PTR
SOA 授权启动记录
SRV
TXT 文本记录
2) DNS资源记录
array dns_get_record(string hostname, [, int type [, array &authns, array &addtl]]) 函数返回一个数组,包含与hostname指定域有关的各种DNS资源记录。

默认情况下dns_get_record()会返回与域有关的所有记录,但可以通过指定type来获取指定类型的记录,type名必须以DNS_开头。
例子:

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

$result = dns_get_record(“domain.com”);
print_r($result);

Array (
[0] => Array (
[host] => domain.com
[type] => A
[ip] => 192.168.8.8
[class] => IN
[ttl] => 169874
)
[1] => Array (
[host] => domain.com
[type] => NS
[ip] => 192.168.8.9
[class] => IN
[ttl] => 169874
)
)

//只获取A记录
$result = dns_get_record(“domain.com”, DNS_A);
print_r($result);
Array (
[1] => Array (
[host] => domain.com
[type] => A
[ip] => 192.168.8.9
[class] => IN
[ttl] => 169874
)
)

3 获取MX记录

1
2
3
4
5
6
7

boolean getmxrr(string hostname, array &mxhosts [, array &weight]) 获取hostname所指定主机的MX记录。

getmxrr(“domain.com”, $mxhosts);
print_r($mxhosts);

Array ( [0] => aspmx.1.google.com )

1.2 服务
1) 获取服务器的端口号
int getservbyname(string service, string protocol) service对应的服务必须在/etc/services文件中指定。protocol参数指定需要此服务的是tcp还是udp部分。

2 获取端口号的服务名
string getservbyport(int port, string protocol) 函数返回对应于所提供的端口号的服务名。prococal参数指定需要此服务的是tcp还是udp部分。

1.3 建立套接字连接
resource fsockopen(string target, int port [, int errno [, string errstring [, float timeout]]]) 函数在端口port上建立于target所表示资源的连接,可选参数errno和errstring中返回错误信息。可选参数timeout设置时间限值,以秒为单位,表示函数在失败前多长时间内会继续尝试建立连接。

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

$http = fsockopen(“www.domain.com”, 80);

$req = “GET / HTTP/1.1\r\n”;
$req .= “Host: www.domain.com \r\n”;
$req .= “Connection: Close\r\n\r\n”;

fputs($http, $req); //发起请求

while(!feof($http)){
echo fgets($http, 1024);
}

//一个例子
function sock_post($url,$time_out = "1") {
$urlarr = parse_url($url);
$errno = "";
$errstr = "";
$transports = "";
if($urlarr["scheme"] == "https") {
$transports = "ssl://";
$urlarr["port"] = "443";
} else {
$transports = "tcp://";
$urlarr["port"] = "80";
}
$fp=@fsockopen($transports . $urlarr['host'],$urlarr['port'],$errno,$errstr,$time_out);
if(!$fp) {
return FALSE;
} else {
fputs($fp, "POST ".$urlarr["path"]." HTTP/1.1\r\n");
fputs($fp, "Host: ".$urlarr["host"]."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($urlarr["query"])."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $urlarr["query"] . "\r\n\r\n");
while (!feof($fp)) {
$sstr = fgets($fp, 1024);
}
unset($sstr);
fclose($fp);
return TRUE;
}
return FALSE;
}

2 邮件
2.1 配置指令
与PHP的mail()函数有关的配置指令共有5个。
1) SMTP = string
SMTP指令用于设置Windows平台下PHP邮件函数的MTA(邮件传输代理)。默认是localhost,注意它只与Windows平台有关。
2) sendmail_from = string
sendmail_from指令设置消息首部的From字段。默认是Null
3) sendmail_path = string
如果sendmail程序不在系统路径中,或者如果需要向sendmail程序传递额外的参数,sendmail_path指令用于设置到sendmail二进制程序的路径。默认为sendmail –t –i。注意,此指令只用于类UNIX平台。Windows平台依赖于与SMTP指令确定的SMTP服务器在端口smtp_port建立的套接字连接。
4) smtp_port=integer
smtp_port指令用于设置连接SMTP指令所指定服务器时使用的端口。默认是25。
5) mail.force_extra_parameters = string
可以使用mail.force_extra_parameters指令向sendmail程序传递额外的标志。

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

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = me@example.com

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =

; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =

; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
mail.add_x_header = On

; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log =

2.2 使用PHP脚本发送电子邮件
boolean mail(string to, string subject, string message [, string addl_headers [, string addl_params]]) 函数可以向一个或多个接受者发送带有主题和消息的电子邮件。在类UNXI平台上,PHP的mail()函数依赖于sendmail MTA。如果使用其它MTA,需要使用该MTA的sendmail包装器。PHP的这个函数在Windows平台上的实现依赖于与SMTP配置指令指定的MTA建立套接字连接。

3 常见网络任务
3.1 连接服务器

1
2
3
4
5
6
7

$server = “www.domain.com”;
system(“/bin/ping –c 3 $server”);
3.2 创建端口扫描器

$target = “www.domain.com”;
system(“/usr/bin/nmap $target”);

坚持原创技术分享,您的支持将鼓励我继续创作!