当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

4.3 Annotation-based declarative transactions and XML-based declarative transactions

sql server如何得到本条记录与上一条记录的差异,即变动值

7.13 Day20----MYSQL

如何低成本修bug?测试左移给你答案

企业需要知道的5个 IAM 最佳实践

Can‘t connect to MySQL server on ‘localhost3306‘ (10061) 简洁明了的解决方法

Get the selected content of the radio box

Teenage Achievement Hackers Need These Skills
![[Cloud Native--Kubernetes] Pod Resource Management and Probe Detection](/img/1a/b3bdf9b62c82b0fc4d913045981d94.png)
[Cloud Native--Kubernetes] Pod Resource Management and Probe Detection

嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制
随机推荐
What are the functions of mall App development?
9、动态SQL
idea设置识别.sql文件类型以及其他文件类型
Unity自动生成阻挡Collider的GameObject工具
Web Basics and Exercises for C1 Certification - My Study Notes
Unity表格配置编辑工具
JS basics - forced type conversion (error-prone, self-use)
想好了吗?
力扣:746. 使用最小花费爬楼梯
7.16 Day22---MYSQL(Dao模式封装JDBC)
处理List<Map<String, String>>类型
Wwise入门和实战
8款最佳实践,保护你的 IaC 安全!
文献管理工具 | Zotero
C Expert Programming Chapter 4 The Shocking Fact: Arrays and Pointers Are Not the Same 4.5 Other Differences Between Arrays and Pointers
Gartner 权威预测未来4年网络安全的8大发展趋势
Can 't connect to MySQL server on' localhost3306 '(10061) simple solutions
The 2022 PMP exam has been delayed, should we be happy or worried?
string类简介
C Expert Programming Chapter 5 Thinking about Linking 5.2 Advantages of Dynamic Linking