Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Telnet套接字网关到Cold聚变事件网关连接到星号AMI

Telnet套接字网关到Cold聚变事件网关连接到星号AMI
EN

Stack Overflow用户
提问于 2016-10-08 01:42:15
回答 4查看 589关注 0票数 2

我希望我的ColdFusion应用程序能够通过管理API记录通过telnet通过星号主机传输的事件。ColdFusion事件网关可以侦听特定端口,但不能启动连接本身,因此我需要一个网关,它可以启动到星号主机(在指定端口上)的telnet连接,并将流事件推送到ColdFusion服务器(在指定端口上)。我真的不想重新发明轮子,所以有什么实用工具可以做到这一点吗?

我的术语可能是不正确的,因为我不是那么技术性,但我希望我已经解释了足够的要求!“实用程序”可以驻留在Linux或windows平台上。

编辑:要连接到星号主机telnet流并进行身份验证,必须发送以下内容:

代码语言:javascript
运行
AI代码解释
复制
Action: login<CRLF>
Username: usr<CRLF>
Secret: abc123<CRLF>
<CRLF>

我知道之前发布的一个类似于此的问题(但没有回答),但我很高兴在ColdFusion之外找到一个解决方案

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-14 16:18:33

如果您只需要从星号服务器捕获事件,我建议采用不同的方法。

由于您使用的是星号AMI,请查看星号-Java。据我所读,它是一个java库,它为您处理低级套接字通信和解析,并提供用于与星号服务器交互的更高级别的接口。因此,它能够启动一个连接,捕获事件和更多。

理论上,您可以在应用程序启动时打开连接并注册以接收事件。只要连接保持打开,应用程序就会收到来自星号的事件。当应用程序结束时,只需关闭连接以停止事件。

初始化连接

要简单地捕获事件,首先创建到星号服务器的连接。只需提供适当的主机和凭据:

代码语言:javascript
运行
AI代码解释
复制
managerFactory = createObject("java", "org.asteriskjava.manager.ManagerConnectionFactory");
connection = managerFactory.init( hostNameOrIP
                                 , portNum
                                 , userName
                                 , theSecret ).createManagerConnection();

注册事件

要接收事件,必须首先向连接注册一个ManagerEventListener。通常,这需要编写实现正确接口的自定义java类。但是,只要使用一点动态代理魔术,就可以使用标准的CFC。星号中的任何事件都将直接路由到CFC,并可以使用CF代码进行处理。

若要添加侦听器,请使用一个名为onManagerEvent的函数创建CFC。每当星号服务器上发生注册事件时,将调用此函数。

代码语言:javascript
运行
AI代码解释
复制
// YourCFCListener.cfc
component {
    public void function onManagerEvent(any managerEvent)
    {
        // For demo purposes, just output a summary of the event to a log file
        WriteLog( text=arguments.managerEvent.toString(), file="AsteriskListenerLog" );
    }
}

接下来,创建一个代理并将其注册到连接中。

代码语言:javascript
运行
AI代码解释
复制
proxyListener = createDynamicProxy("path.YourCFCListener"
      , [ "org.asteriskjava.manager.ManagerEventListener"] );
connection.addEventListener( proxyListener );

接收事件:

若要开始接收事件,请登录并连接到服务器。使用掩码指定要接收的事件:"off""on"或以逗号分隔的特定事件列表(即"system,call,log")。

代码语言:javascript
运行
AI代码解释
复制
// receive ALL events
connection.login("on");

一旦连接打开,您将看到写入演示日志文件的事件(假设存在服务器活动)。在一次测试中,让页面sleep()进行几秒钟,以允许某些事件流。然后关闭连接并停止事件:

代码语言:javascript
运行
AI代码解释
复制
sleep(4000);
connection.logoff()

在实际应用程序中,您可能会打开连接一次,并将其存储在持久作用域中,就像应用程序一样。然后,只有在应用程序关闭时才关闭它。

从API来看,您可以使用它做更多的事情。但是,上面应该提供一个基本的POC示例,让您开始捕获事件。

票数 1
EN

Stack Overflow用户

发布于 2016-10-09 05:08:26

我开始怀疑我是否理解你的要求。您希望您的应用程序“启动一个监听连接”。CF套接字网关可能不会“启动”一个连接,但它确实“有一个连接可听”。为什么要启动你已经拥有的东西?为什么“启动”这个词这么重要?

无论如何,我将您的要求解释为“使用特定端口启动到主机的telnet连接”,其实质意思是“连接到另一台服务器上的套接字”。你不需要一个完整的网关/重定向机器。您可以在的CFC中这样做。它只需2到3行代码(搜索web中的“读取和写入套接字”)。

因此,在您的最终设计中,您将在两个套接字之间建立连接。一个在你的冷融合服务器上,另一个在主机服务器上。连接中的通信是双向的.然后,任意数量的客户机(例如10000)都可以在CF套接字上侦听来自主机服务器的所有消息。

票数 0
EN

Stack Overflow用户

发布于 2016-10-16 14:56:07

我以通常的方式创建了Cold聚变套接字网关的实例。参见,例如,https://www.bennadel.com/blog/2173-using-socket-gateways-to-communicate-between-coldfusion-and-node-js.htm

我有以下准备工作:

1)听众CFC (SocketGatewayListener.cfc)的内容:

代码语言:javascript
运行
AI代码解释
复制
<cfcomponent>

<cffunction name="onIncomingMessage" returntype="struct" output="false">
<cfargument name="cfevent" >
<cfset var msg = {} >

<cfscript>
/* The code within this cfscript represents the proof of concept.     'xxx.xxx.xxx.xxx' is an IP, 1226 an arbitrary port, so the next line connects to an external socket. Make sure it is listening. */
var socket = createobject("java","java.net.Socket").init('xxx.xxx.xxx.xxx',1226); 
var out = createobject("java","java.io.PrintWriter").init(socket.getOutputStream(), true);
var bufferedWriter = createobject("java","java.io.BufferedWriter").init(out);
/*Send data to external socket */
bufferedWriter.write("Authentication data at #now()#");
bufferedWriter.flush();
</cfscript>

<cfset msg["message"] = cfevent.data.message>

<cfreturn msg>
</cffunction>

</cfcomponent>

2)配置文件(socketGateway.cfg)的内容:

代码语言:javascript
运行
AI代码解释
复制
# The port the socket server listens on.
port=9093

3)我的系统: Coldfusion 2016 Windows 7终极版

Netcat:您可以使用可执行的nc.exe侦听或向套接字网关发送消息。一旦网关运行,使用DOS命令侦听如下

代码语言:javascript
运行
AI代码解释
复制
nc 127.0.0.1 9093

用如下命令发送消息

代码语言:javascript
运行
AI代码解释
复制
echo 'my test message' | nc 127.0.0.1 9093

Hercules (en.html):您可以使用Hercules实用程序进行测试。使用它的'TCP客户端‘向您的套接字网关发送消息,并使用它的'TCP’模拟从另一个主机(代码中的IP和端口:xxx.xxx,1226)监听网关的套接字。

不幸的是,AdobeCold聚变的套接字网关无法像您所期望的那样向所有正在监听的套接字广播。您只能让它回复邮件的发件人。显然,这是故意的。这是令人惊讶的。默认情况下,您希望所有侦听套接字都接收消息。我将向冷却小组提出一个特写请求。

我在网络上发现了这两种解决方案,它们似乎提供了广播到所有功能,以及更多的功能:

https://github.com/nmische/cf-websocket-gateway/tree/java-websocket

https://github.com/softwarezman/cf-socketiogateway

然而,当我在2016年寒冷天气中测试它们时,我遇到了很多错误。在接下来的几天里,我将向Cold聚变附带的SocketGateway Java代码添加广播到所有功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39930914

复制
相关文章
套接字
版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.net/zy010101/article/details/88673990
zy010101
2019/05/25
1.3K0
套接字选项
选项影响套接字操作,如 封包路由,OOB数据传输,获取和设置套接字选项分别是 getsockopt  setsockopt 用法如下: int getsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); int setsockopt(SOCKET s,int level,int optname,char* optval,int* optlen); 每个协议层套接字的选项有不同的级别: 应用层:SOL_SOCKET 传输层:IPPR
用户1154259
2018/01/17
1.3K0
Socket(套接字)
TCP/IP只是一个协议栈,Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。
老马的编程之旅
2022/06/22
1.3K0
Python套接字
Python只支持AF_UNIX(基于文件)、AF_NETLINK(使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC)、AF_TIPC(透明的进程间通信)、AF_INET(基于网络)家族。
用户4845306
2019/03/14
1.6K0
Java套接字
  本文补充一下Java关于套接字方面的内容,因为其应用相对比较简单,所以下面介绍两个程序实例。
云海谷天
2022/08/09
8120
Java套接字
16(套接字)
套接字描述符在Unix系统中是用文件描述符实现的。事实上,许多处理文件描述符函数(read和write)都可以处理文件描述符 要创建一个套接字,可以调用socket函数
提莫队长
2019/02/21
1K0
套接字Socket编程
Socket,原意插座、插口。写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以通信前,双方都要建立一个Socket。
JavaEdge
2021/12/07
1.3K0
套接字Socket编程
Socket 套接字协议
A network socket is an internal endpoint for sending or receiving data within a node on a computer network. Concretely, it is a representation of this endpoint in networking software (protocol stack), such as an entry in a table (listing communication protocol, destination, status, etc.), and is a form of system resource.
vanguard
2020/03/18
1.5K0
IPC|网络套接字
为了访问由UDP提供的服务,你需要像以前一样使用套接字和close系统调用,但你需要用两个
heidsoft
2022/04/18
1.1K0
套接字随笔1
accept函数接受一个客户端请求后会返回一个新的SOCKFD值,当有不同的客户端同时有不同请求时,会返回不同的SOCKFD的值。这个不同的值和建立SOCKET 时生成的SOCKFD还是不同的。服务器与客户端之间的通信就是在这些不同的SOCKFD上进行的。
随心助手
2022/11/30
5690
linux 网络套接字
在内核分析网络分组时,底层协议的数据将传输到跟高的层。而发送数据的时候顺序是相反的。每一层都是通过加(首部+净荷)传向跟底层,直至最终发送。
233333
2019/05/25
2.8K0
Socket - 套接字编程
目录 Socket - 套接字编程 Socket 通信流程图 Socket模块 socket()方法 部分参数 bind()方法 listen()方法 accept()方法 accept()函数返回值:sock、addr connect() 方法 close()方法 服务端客户端对比 简单案例 简易通信循环 优化通信循环 黏包问题 Struct 模块 规定报头 解决黏包问题 上传文件案例 UDP通信 Socket - 套接字编程 只要涉及到远程数据交互必须要操作OSI七层模型,那么每层都需要相应的程序
HammerZe
2022/03/25
1.1K0
Socket - 套接字编程
套接字Socket编程
Socket,原意插座、插口。写软件程序时,可以想象成一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以通信前,双方都要建立一个Socket。
JavaEdge
2021/10/18
1.4K0
Python与套接字
服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时 客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应 数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束
星陨1357
2023/03/14
2.4K0
Python与套接字
accept()返回的套接字绑定哪个端口 新旧套接字的联系
摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的。它从内核中取出已经建立的客户连接,然后把这个已经建立的连接返回给用户程序,此时用户程序就可以与自己的客户进行点到点的通信了。
bear_fish
2018/09/20
4K1
python UDP套接字通信
UDPserver.py 1 import socket 2 #导入套接字模块 3 4 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 5 # - socket.AF_INET:IPV4 6 # - socket.STREAM:TCP 7 # - socket.DGRAM:UDP 8 9 s.bind(('',25555)) 10 #绑定套接字有效地址和端口 11 #''空位任何地址 本地的127.0.0.1 和局域网还有自己真实
py3study
2020/01/19
1.6K0
什么是socket套接字?
互联网已经深入我们生活的方方面面,重要性不言而喻。上世纪70年代互联网刚发明的时候,就确定了客户端-服务器模型,这个编程模型一直沿用到现在都没有变过,我们在电脑上打开一个网站,在微信上聊天,打开一个app本质上都是客户端和服务器的连接和交互。
zhanyd
2022/05/16
5990
什么是socket套接字?
套接字连接状态检测
主动断开连接 主动断开连接会发送,关闭事件 connec函数检测连接状态,getlasterror send发送(tcp keeplive心跳包或者有数据时检测),recv接收判断异常(无数据判断异常) linux中的 select(socket用户和内核传递数组,大小有限制) poll(同select大小无限制,链表维护) epoll(内核态数据) 拔网线 拔网线后,关闭事件不能传递,连接状态不好检测 设置连接或者发送超时,同步套接字超时设置 // platform-specific switch #i
sofu456
2021/12/06
1K0
Socket套接字通信原理
       Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.
业余草
2019/01/21
8970
Socket套接字通信原理
基于udp的套接字
1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) 5 ss.close() # 关闭服务器套接字 udp客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/c
超蛋lhy
2018/08/31
8350

相似问题

利用Cold聚变接入无线支付网关

14

点对点重设连接:套接字写入错误- cfcontent on cold聚变10

14

PHP套接字,永久连接到服务器以接收来自星号AMI的事件?

22

能够正确连接到telnet套接字

11

HTTP REST网关到AMQP请求-响应,没有Web套接字或轮询

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档