我需要为 curl 指定源端口范围。我没有看到任何让我在 TCP 中选择源端口范围的选项。
可能吗 ?
谢谢
我认为使用fsockopen
. 当被防火墙阻止时,我多次提出这对我有用。见: http: //php.net/fsockopen
$ports = array(80, 81);
foreach ($ports as $port) {
$fp =@ fsockopen("tcp://127.0.0.1", $port);
// or fsockopen("www.google.com", $port);
if ($fp) {
print "Port $port is open.\n";
fclose($fp);
} else {
print "Port $port is not open.\n";
}
}
顺便说一句,有CURLOPT_PORT
CURL,但不适用于tcp://127.0.0.1
;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1");
curl_setopt($ch, CURLOPT_PORT, 80);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$re = curl_exec($ch);
// echo curl_errno($ch);
curl_close($ch);
print $re;
可以使用CURLOPT_LOCALPORT
和CURLOPT_LOCALPORTRANGE
选项,类似于curl的--local-port
命令行选项。
在以下示例中,curl 将尝试使用 6000-7000 范围内的源端口:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_LOCALPORT, 6000);
curl_setopt($ch, CURLOPT_LOCALPORTRANGE, 1000);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
从命令行可以使用:
curl --local-port 6000-7000 <url>
有关文档,请参阅:CURLOPT_LOCALPORT和本地端口号。