65.9K
CodeProject 正在变化。 阅读更多。
Home

Omegle4COM 第三方库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (2投票s)

2013年12月2日

CPOL

7分钟阅读

viewsIcon

18258

downloadIcon

183

Omegle4COM .NET Omegle 接口

其他条款 

对此库的任何衍生的或非衍生的分发都必须包含对原作者的署名。   

背景

Omegle 是由 Omegle(LLC) 创建的一个网站,您可以在其中与随机陌生人连接并与他们聊天。我创建了一个库,通过一系列 HTTP 请求来接口该网站。我浏览并找到了一些关于如何用 Python 实现此功能的示例,这些示例在逆向工程该网站方面很有帮助,但 C# 或任何 .NET 兼容语言都没有有用的示例,因此我决定自己创建一个。我与 Omegle(LLC) 没有任何形式的关联,  我只是因为看到了需求而创建了这个库。  

引言

本文将介绍 Omegle4COM DLL 的使用和分发。这不是一个关于如何使用 DLL 的通用教程,它只是 Omegle4COM DLL 的使用参考。这个 DLL 将允许您连接到 Omegle 并与其接口,以便您能够连接和通信其他 Omegle 用户。它提供了从发送和接收消息到显示您正在输入或与共同兴趣的人连接的所有功能,几乎可以在原始网站上实现的任何功能都可以通过这个库以编程方式实现。 

所需知识 

应该对您使用的 .NET 兼容编程语言有基本的编程理解。

应该知道如何注册事件。

应该知道如何与外部库接口。 

使用代码

假设您已经在项目中引用了该库(顺便说一下,唯一必需的库引用是 Omegle4COM.dll,但是为了使应用程序正常工作,您需要在程序集目录中同时拥有 Omegle4COM.dll 和 Newtonsoft.json.dll),第一步是导入 Omegle4COM 命名空间。完成此操作后,创建一个新的 Omegle 对象实例。此时,我们将注册一些事件,有多个事件,但我们将使用三个:StrangerConnectedMessageReceivedStrangerDisconnected。事件处理程序将如下所示:

public void omegle_MessageReceived(Object sender, String data) 
{
	String msg = data; //the only time data contains anything useful
	//Is durring the MessageReceived event
}  

注意:StrangerDisconnected 事件在您或陌生人断开连接时被调用。现在开始与新的随机陌生人聊天。为此,我们将调用 Omegle.Connect() 连接函数接受两个参数和一个可选参数。第一个参数是一个布尔值,它决定是否在调用 ResultAttachment(String) 委托并继续之前等待陌生人连接。第二个参数是一个字符串数组,这些将是 Omegle 网站在尝试将您连接到陌生人时查找的主题或兴趣。如果数组中没有值,它将为您找到一个完全随机的陌生人。最后一个参数是可选的,它是一个接受 String 参数的委托方法,目前它没有任何用处,因为它只传递对话 ID,并且我还没有以任何有用的方式实现它,但将来我计划添加一个静态对象方法,它接受 ID,因此无需对象引用。 此时,您可能想要与陌生人通信,所以我们首先通过调用 Omegle.ShowTyping() 向他们显示我们正在输入,然后当我们完成输入后,我们将调用 Omegle.StopTyping()。现在,要发送消息,我们将调用 Omegle.SendMessage("This is a message")。然后我们将简单地断开连接,Omegle.Disconnect()。就是这样! 现在您离创建自己的 Omegle 集成程序又近了一步,祝您玩得开心! 

方法、变量和事件 

名称  类型 参数 描述 
Omegle  类/类型 主类实例 
OmegleEventHandler 委托 Object, String 事件委托 
StrangerConnected OmegleEventHandler Object, String 当您连接到陌生人时调用 
StrangerTyping OmegleEventHandler Object, String 当陌生人开始输入时调用 
StrangerStoppedTyping OmegleEventHandler Object, String 当陌生人停止输入时调用 
MessageReceived OmegleEventHandler Object, String 当陌生人向您发送消息时调用,通过字符串参数传递消息 
StrangerDisconneced OmegleEventHandler Object, String 当您或陌生人断开连接时调用 
connected bool 确定您是否连接到陌生人 
Connect void bool, String[], Action<String> = null 将您连接到 Omegle 并开始搜索与您有共同话题的陌生人,如果布尔值为 true,则会等待陌生人连接。操作完成后调用 ResultAttachment 
ShowTyping void 向陌生人显示您正在输入 
StopTyping void 向陌生人显示您已停止输入 
SendMessage   void  String 向陌生人发送消息  
Disconnect void 与陌生人断开连接 

示例

这是一个非常粗略的 C# 控制台应用程序示例,它是一个回合制 Omegle 桌面客户端。 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
//Include the dll
using Omegle4COM;

namespace Omegle_Desktop
{
    class Program
    {
        static Object objLock = new Object();
        static bool run = true;
        static Omegle omegle = new Omegle();

        static void Write(string value) { lock (objLock) { System.Console.Write(value); } }

        static void WriteLine(string value) { lock (objLock) { System.Console.WriteLine(value); } }

        static string ReadLine() { lock (objLock) { return System.Console.ReadLine(); } }

        static void Main(string[] args)
        {
            //Register events
            omegle.MessageReceived += new Omegle.OmegleEventHandler(onMessage);
            omegle.StrangerTyping += new Omegle.OmegleEventHandler(onTyping);
            omegle.StrangerStoppedTyping += new Omegle.OmegleEventHandler(onStoppedTyping);
            omegle.StrangerDisconnected += new Omegle.OmegleEventHandler(onDisconnect);

            WriteLine("Searching For Stranger!");
            //Connect to omegle, interests being the command line args
            //It will wait for someone to connect before continuing
            omegle.Connect(true, args);
            WriteLine("Found One!");
            Write(">");
            //Show them that were typing
            omegle.ShowTyping();
            String msg = ReadLine();
            //Show them we stopped typing
            omegle.StopTyping();
            WriteLine("You: " + msg);
            //Send the message
            omegle.SendMessage(msg);
            //wait for stranger to disconnect
            while (run)
            {
            }
            WriteLine("Stranger Disconnected");
            Console.ReadKey(true);
        }

        static void onMessage(Object sender, String data)
        {
            //Print the message
            WriteLine("Stranger: " + data);
            Write(">");
            //Show stranger were typing
            omegle.ShowTyping();
            String msg = ReadLine();
            //Show stranger weve stopped typing
            omegle.StopTyping();
            WriteLine("You: " + msg);
            //Send message
            omegle.SendMessage(msg);
        }

        static void onTyping(Object sender, String data)
        {
            WriteLine("Stranger Typing...");
        }

        static void onStoppedTyping(Object sender, String data)
        {
            WriteLine("Stranger Stopped Typing");
        }

        static void onDisconnect(Object sender, String data)
        {
            //Stop program
            run = false;
        }
    }
}

库如何工作

在本节中,我将深入探讨我的库如何工作以及如何可能创建自己的库。要做到这一点,您必须首先理解 Omegle 网站的工作原理。起初我以为它通过某种 JavaScript 工作,虽然我部分正确,但它更依赖于一系列 HTTP (POST/GET) 请求。首先,它选择多个前端之一来运行,我还没有完全弄清楚它是如何确定使用哪个前端的,所以我通常使用 front7。前端是网站网关,它在查询网站时使用,前端以子域名的形式附加到网站上,如下所示:http://front#.omegle.com/,其中 # 被替换为前端编号。在此之后,它会通过 GET 请求调用起始页面。有多个变量需要传递,但我们只关心两个:topicslang。主题是网站在尝试将您连接到合作伙伴时使用的兴趣,并以 JSON 数组的形式提交。lang 是我们正在操作的语言,在我们的目的中,我使用 en。因此,我们的最终请求将如下所示:

http://front7.omegle.com/start?topics=["topic1","topic2","topic3","etc..."]&lang=en  

现在该请求将返回会话 ID,我们需要它来发送消息和监听事件。ID 以引号括起来返回,所以您可能想做类似的事情(C#)

String ID;

public void Start()
{
	WebClient web = new WebClient();
	Using(StreamReader sr = new StreamReader(web.OpenUrl("http://front7.omegle.com/start?topics=["topic1","topic2","topic3","etc..."]&lang=en")))
		data = sr.ReadToEnd();
	ID = ID.Remove(0, 1); 
	ID = ID.Remove(ID.Length - 1, 1);

 在上面的代码中,我们创建了一个 WebClient 对象实例。然后,我们使用此客户端打开到 URL 的流,并将流读取到一个名为 ID 的字符串中。然后,我们删除字符串的第一个和最后一个字符,留下隔离的 ID。此时,我们只初始化了一个会话,并开始寻找陌生人,我们还没有真正连接到陌生人。现在我们已经启动了一个新会话,我们需要检查事件。 现在,为了做到这一点,我们将不得不向 front#.omegle.com/events 发送一个 POST 请求,其中包含一个变量 id。由于我们发送的是 POST 请求而不是 GET 请求,我们将不得不采取不同的方法。我们将创建一个新的 String 方法 GetPostResponse,它将查询服务器并返回响应,该方法将接受 ID。 

private string GetPostResponse(String str)
        {
            try
            {
                WebRequest req = WebRequest.Create("http://front7.omegle.com/events");
                WebResponse resp;
                req.ContentType = "application/x-www-form-urlencoded";
                req.Method = "POST";
                Byte[] Bytes = System.Text.ASCIIEncoding.ASCII.GetBytes("id=" + str);
                req.ContentLength = Bytes.Length;
                using (Stream stream = req.GetRequestStream())
                    stream.Write(Bytes, 0, Bytes.Length);
                resp = req.GetResponse();
                using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
                    return sr.ReadToEnd();
            }
            catch (Exception)
            {
                return ("null");
            }

        } 

 现在您可以尝试查看该方法并找出所有含义,但我将告诉您,您提供 ID,它将返回事件响应。现在您需要做的就是找出正在调用哪个事件,我们通过简单的 if String.Contains() 语句来做到这一点,就像这样:

String data = GetPostResponse(ID);

if(data.Contains("connected"))
{
	//do something
} 

 事件是:

gotMessage
connected
typing
stoppedTyping
strangerDisconnected

我建议首先检查 gotMessage,以防消息包含一个或多个事件关键字。要获取 gotMessage 中的消息,您必须使用 JSON.NET。之后就相对简单了,导入 Newtonsoft.json.Linq,然后使用这段代码来获取消息:

String msg = (String)JArray.Parse(data)[0][1]; 

 基本上,这会将 JSON 字符串解析为可用的数据,然后获取索引为 0 的值,然后获取索引为 1 的子值。 现在我们很可能想向陌生人发送数据,所以我们只需这样做:

 url.UploadValues("http://front7.omegle.com/send", new NameValueCollection() { { "msg", mesg }, { "id", ID } });  

那个会向陌生人发送消息,其中 mesg 是消息,ID 是 ID。您还可以通过 front#.omegle.com/typingfront#.omegle.com/stoppedTyping  向用户显示您正在输入或已停止输入,但您必须删除 msg 变量,所以删除整个

{"msg", mesg},

查询。现在剩下要做的就是断开连接,您可以像显示输入状态一样进行操作,除了您会将查询指向 front#.omegle.com/disconnect 。 就是这样! 

历史

1.0.0 - 发布

***免责声明*** 

我与 JSON.NET 或 Omegle (LLC) 没有任何形式的关联,这个库是完全第三方的,请自行承担风险使用。在使用此库之前,请务必阅读与 Omegle 网站相关的所有条款和条件。  

 

© . All rights reserved.