当前位置:网站首页>php实现telnet访问端口
php实现telnet访问端口
2022-08-04 05:25:00 【eleven_-11】
<?php
/******************************************************************************************** * Copy Right (c) 2021 Capsheaf Co., Ltd. * * Author: Archibald<[email protected]> * Date: 2021-04-02 16:25:37 CST * Description: telnet.php's function description * Version: 1.0.0.20210402-alpha * History: * Archibald<[email protected]> 2021-04-02 16:25:37 CST initialized the file *******************************************************************************************/
error_reporting(E_ALL ^ E_NOTICE);
class Telnet
{
private $hSocket = null;
public function telnet($sHost, $nPort)
{
$this->hSocket = @fsockopen($sHost, $nPort);
if (empty($this->hSocket)){
throw new Exception("connect ip:{$sHost} port:{$nPort} failed.");
}
socket_set_timeout($this->hSocket, 2, 0);
}
public function close()
{
if ($this->hSocket){
fclose($this->hSocket);
}
$this->hSocket = null;
}
public function write($buffer)
{
$buffer = str_replace(chr(255), chr(255).chr(255), $buffer);
fwrite($this->hSocket, $buffer);
}
public function getc()
{
return fgetc($this->hSocket);
}
public function readTill($what)
{
$buffer = '';
while(true){
$IAC = chr(255);
$DONT = chr(254);
$DO = chr(253);
$WONT = chr(252);
$WILL = chr(251);
$theNULL = chr(0);
$c = $this->getc();
if ($c === false) {
return $buffer;
}
if ($c == $theNULL) {
continue;
}
if ($c == "1") {
continue;
}
if ($c != $IAC) {
$buffer .= $c;
if ($what == (substr($buffer, strlen($buffer) - strlen($what)))) {
return $buffer;
} else {
continue;
}
}
$c = $this->getc();
if ($c == $IAC) {
$buffer .= $c;
} else if (($c == $DO) || ($c == $DONT)) {
$opt = $this->getc();
fwrite($this->hSocket, $IAC . $WONT . $opt);
} elseif (($c == $WILL) || ($c == $WONT)) {
$opt = $this->getc();
fwrite($this->hSocket, $IAC . $DONT . $opt);
}
}
}
}
try {
$telnet = new Telnet("192.168.173.2",28030);
if (empty($telnet)){
echo "connect failed.";
} else {
echo "connect success.";
}
// echo $telnet->readTill("login: ");
// $telnet->write("kongxx\r\n");
// echo $telnet->readTill("password: ");
// $telnet->write("KONGXX\r\n");
// echo $telnet->readTill(":> ");
// $telnet->write("ls\r\n");
// echo $telnet->readTill(":> ");
$telnet->close();
} catch(Exception $exception){
var_dump("connect failed: " . $exception->getMessage());
exit;
}
边栏推荐
- Unity自动生成阻挡Collider的GameObject工具
- 【问题解决】同一机器上Flask部署TensorRT报错记录
- Unity动画生成工具
- EntityComponentSystemSamples学习笔记
- 利用Jenkins实现Unity自动化构建
- 5个开源组件管理小技巧
- Cannot read properties of null (reading ‘insertBefore‘)
- MySql data recovery method personal summary
- Summary of MySQL database interview questions (2022 latest version)
- 读者让我总结一波 redis 面试题,现在肝出来了
猜你喜欢
随机推荐
Gartner 权威预测未来4年网络安全的8大发展趋势
8.03 Day34---BaseMapper查询语句用法
MySql数据恢复方法个人总结
Will the 2023 PMP exam use the new version of the textbook?Reply is here!
7.16 Day22---MYSQL(Dao模式封装JDBC)
Unity表格配置编辑工具
The string class introduction
C Expert Programming Chapter 4 The Shocking Fact: Arrays and pointers are not the same 4.2 Why does my code not work
处理List<Map<String, String>>类型
4.2 Declarative Transaction Concept
SLSA 框架与软件供应链安全防护
The 2022 PMP exam has been delayed, should we be happy or worried?
注意!软件供应链安全挑战持续升级
leetcode 12. Integer to Roman numeral
Dynamic programming of the division of numbers
MySQL log articles, binlog log of MySQL log, detailed explanation of binlog log
想低成本保障软件安全?5大安全任务值得考虑
JS basics - forced type conversion (error-prone, self-use)
LCP 17. Quick Calculation Robot
如何低成本修bug?测试左移给你答案






![Deploy LVS-DR cluster [experimental]](/img/ad/84e05a6421d668b0b6ba6eeba0c730.jpg)


