Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP连接到IRC服务器时连接超时_Php_Irc - Fatal编程技术网

使用PHP连接到IRC服务器时连接超时

使用PHP连接到IRC服务器时连接超时,php,irc,Php,Irc,我试图将我的PHP脚本连接到IRC,但它总是超时。我在服务器上,所以我知道它已启动并运行,我不知道问题出在哪里 这可能是我的代码中的错误吗 <?php /** * Configuration. * Pretty self-explanatory */ $ircServer = "hub.malvager.com"; $ircPort = "6667"; $ircChannel = "#hackforums"; set_time_limit(0); $ircSocket = f

我试图将我的PHP脚本连接到IRC,但它总是超时。我在服务器上,所以我知道它已启动并运行,我不知道问题出在哪里

这可能是我的代码中的错误吗

<?php

/**
 * Configuration.
 * Pretty self-explanatory
 */

$ircServer = "hub.malvager.com";
$ircPort = "6667";
$ircChannel = "#hackforums";

set_time_limit(0);

$ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS);

if ($ircSocket)
{

    fwrite($ircSocket, "USER Orgy orgy.test hfcoder :twBooter\n");
    fwrite($ircSocket, "NICK OrgyBot|" . rand() . "\n");
    fwrite($ircSocket, "JOIN " . $ircChannel . "\n");

    while(1)
    {
        while($data = fgets($ircSocket, 128))
        {
            echo nl2br($data);
            flush();

            // Separate all data
            $exData = explode(' ', $data);

            // Send PONG back to the server
            if($exData[0] == "PING")
            {
                fwrite($ircSocket, "PONG ".$exData[1]."\n");
            }
        }
    }
}
else
{
    echo $eS . ": " . $eN;
}

?>
挖掘:

; <<>> DiG 9.6.2-RedHat-9.6.2-0.BH <<>> hub.malvager.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34815
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 5

;; QUESTION SECTION:
;hub.malvager.com.      IN  A

;; ANSWER SECTION:
hub.malvager.com.   85419   IN  A   69.164.201.185

;; AUTHORITY SECTION:
malvager.com.       85419   IN  NS  ns1.linode.com.
malvager.com.       85419   IN  NS  ns3.linode.com.
malvager.com.       85419   IN  NS  ns2.linode.com.
malvager.com.       85419   IN  NS  ns4.linode.com.
malvager.com.       85419   IN  NS  ns5.linode.com.

;; ADDITIONAL SECTION:
ns1.linode.com.     54252   IN  A   69.93.127.10
ns2.linode.com.     51679   IN  A   65.19.178.10
ns3.linode.com.     41439   IN  A   75.127.96.10
ns4.linode.com.     26259   IN  A   207.192.70.10
ns5.linode.com.     54441   IN  A   109.74.194.10

;; Query time: 4 msec
;; SERVER: 74.220.195.27#53(74.220.195.27)
;; WHEN: Thu Sep 23 16:32:21 2010
;; MSG SIZE  rcvd: 227
;DiG 9.6.2-RedHat-9.6.2-0.BH hub.malvager.com
;; 全局选项:+cmd
;; 得到答案:

;; ->>HEADER服务器可能需要一个ident响应。另外,我运行了那个脚本,它连接良好。可能是防火墙问题。

您有一些错误。

是错误的,因为首先严格检查分解结果,然后按空格字符分解,在IRC实现协议中,所有命令都必须以换行符终止,然后服务器发送给您
“PING\n”
而不是
“PING”
,然后您的
$exData
数组处于此状态

array(1) {
  [0]=>
  string(5) "PING
"
}
然后您的
$exData[0]==“PING”
为false,因为
的“PING”
不等于
的“PING\n”
。 好的解决方案不是在解析器中的命令末尾添加
“\n”
,因为
“\n”
不是唯一的换行符标记(对于较差的IRC协议实现,我建议这样做,您永远不知道IRC协议开发人员可能使用什么换行符标记,想想Delphi INDY Buggy IRC服务器控件),更好的解决方案是不检查她

if (strstr(strtolower($exData[0]), "ping"))
{ 
    $cmd = "PONG";
    if (sizeof($exData) == 1)
    {
        $cmd .= "\n";
    }
    else for ($Index=1; $Index < sizeof($exData); $Index++)
    {
        $cmd .= " " . $exData[$Index];
    }
    /*
     * Not adding newline marker, because is.
     * already exists in last element of $exData
     * array at last position if for was executed
     */
    fwrite($ircSocket, $cmd);
}


关于您的脚本设计,如果您正在编写简单的bot,那么在本主题中我没有什么要说的,但是如果您计划编写一些大型代码,您应该以其他方式设计您的脚本。您必须分离一些层,如IRC协议实现和IRC Bot操作。您应该使用一些类将IRC协议的责任转移到她身上,因为在更大的代码块中,将IRC协议控制与您的机器人操作代码混合在一起是很好的技术债务

听起来您被阻止了,因为您没有设置IDENT

在端口113上查看是否有来自IRC服务器的识别请求

同时,你也可以轻松地做一些事情,使其发挥作用

  • 安装
    netcat
  • 在同一设备上运行
    nc hub.malvager.com 6667
  • 分析结果 如果您的结果是:

    sviss@sviss:~$ nc -v hub.malvager.com 6667
    DNS fwd/rev mismatch: hub.malvager.com != li115-185.members.linode.com
    hub.malvager.com [69.164.201.185] 6667 (ircd) open
    :hub.malvager.com NOTICE AUTH :*** Looking up your hostname...
    :hub.malvager.com NOTICE AUTH :*** Found your hostname (cached) 
    
  • 从源文件安装新鲜的
    PHP
    version(这一点很重要,因为在apt的二进制版本中,或者某些版本不推荐使用)
  • 然后,如果问题还没有解决,您可以修改默认的
    PHP.ini
    文件来调整
    fsockopen
    设置(我认为使用默认的
    .ini
    文件,您的脚本将工作得很好)
  • 如果您的结果表示某些连接错误,有些人会这样想:

    sviss@sviss:~$ nc -v hub.malvager.com 6668
    DNS fwd/rev mismatch: hub.malvager.com != li115-185.members.linode.com
    hub.malvager.com [69.164.201.185] 6668 (?) : Connection refused
    
  • tracert hub.malvager.com
    并将结果发布到您的问题中,然后我必须阅读并更新我的答案

  • 如果您正在使用POSIXdo
    dig hub.malvager.com
    并将结果发布到您的问题中,那么我必须阅读此内容并更新我的答案

  • 如果您正在使用WINDOWSdo
    nslookup hub.malvager.com
    并将结果发布到您的问题中,那么我必须阅读此内容并更新我的答案

  • 如果你想单独分析这个结果,从你的角度来看,handy是我这个命令的结果,然后我发布这个

  • 挖掘hub.malvager.com的结果

    ; <<>> DiG 9.5.1-P3 <<>> hub.malvager.com
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33134
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;hub.malvager.com.              IN      A
    
    ;; ANSWER SECTION:
    hub.malvager.com.       84935   IN      A       69.164.201.185
    
    ;; Query time: 17 msec
    ;; SERVER: 62.179.1.62#53(62.179.1.62)
    ;; WHEN: Wed Sep 22 18:28:57 2010
    ;; MSG SIZE  rcvd: 50
    

    Telnet指出,对于malvager.com,端口6667,应该以这种方式写入

    "PASS *\n"
    "NICK OrgyBot|" . rand() . "\n"
    "USER Orgy orgy.test hfcoder :twBooter\n"
    
    
    if($exData[0] == "PING :hub.malvager.com")
    { 
     fwrite($ircSocket, "PONG :hub.malvager.com".$exData[1]."\n"); 
    } 
    

    您是从本地计算机还是Web服务器运行此bot?如果它来自您的Web服务器,则可能是malvager.com阻止了您的Web服务器,而其他irc服务器取消了阻止

    我在其他IRC网络上也遇到过这个问题,结果是,其他人使用了我用来托管僵尸网络的同一个托管提供商,它要求IRC服务器阻止来自我主机的IP

    我会询问malvager.com管理员您连接的IP地址是否被阻止

    还可以尝试使用($ircServer,$ircPort,$eN,$eS,30)

    编辑:

    我用的是bluehost,看起来你也是。我的irc在他们的服务器上工作时遇到问题,我在现场聊天中与他们交谈。他们提到他们不允许irc机器人在他们的网络上运行,所以他们封锁了大部分网络。但是,他们提到,如果有人路过并被抓住,他们将暂停您的帐户。

    1)如果服务器发送带有消息的ping,您应该在回复时使用pong,然后再发送相同的消息。

    2) 不时(每隔30秒左右)向服务器发送ping消息。如果您在几分钟内没有得到答复,您可能会认为客户机已经从服务器超时并重新连接。

    < P>根据RCF1459的IRC协议中的消息结束是“\r n n”,不只是“\n”。某些服务器实现可能会因此而拒绝您的消息。

    您是否尝试使用telnet模拟您的机器人行为并查看发生了什么?连接、键入(或复制粘贴)您的机器人将输出的内容并盯着屏幕几分钟。

    我记得在mIRC时代做过一些机器人。 问题总是我过去常犯的断线 在留言后发送

    据我记忆所及,查尔斯维尔30和32岁左右。 为什么不试试它们而不是\n。有些服务器很漂亮 对这个问题敏感

    此外,乒乓球必须在比赛结束后用文字回复 平,这很重要


    玩得开心

    bluehost.com
    主机阻止IRC连接到此IRC服务器,这是已检查的信息。

    代码有一个完美的工作IRC服务器。我会走这条路


    附言:如果你不喜欢它,那就和蔼可亲,不要把它写下来。谢谢

    如果它超时了,我猜它不会把乒乓球发回。看看是否可以捕获tcp流量(比如说使用Wireshark)以确保它正在这样做。另外,看看另一个php机器人是如何实现的:如果您喜欢.Ar
    ; <<>> DiG 9.5.1-P3 <<>> hub.malvager.com
    ;; global options:  printcmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33134
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;hub.malvager.com.              IN      A
    
    ;; ANSWER SECTION:
    hub.malvager.com.       84935   IN      A       69.164.201.185
    
    ;; Query time: 17 msec
    ;; SERVER: 62.179.1.62#53(62.179.1.62)
    ;; WHEN: Wed Sep 22 18:28:57 2010
    ;; MSG SIZE  rcvd: 50
    
    traceroute to hub.malvager.com (69.164.201.185), 30 hops max, 40 byte packets
     1  10.10.10.1 (10.10.10.1)  1.428 ms  1.861 ms  2.287 ms
     2  * * *
     3  * * *
     4  * * *
     5  * * *
     6  * * *
     7  *  (84.116.252.205)  145.057 ms  145.557 ms
     8  84.116.132.53 (84.116.132.53)  141.189 ms  142.263 ms  143.312 ms
     9  84.116.132.230 (84.116.132.230)  143.827 ms  169.115 ms *
    10  us-nyc01b-rd1-pos-12-0.aorta.net (213.46.160.242)  141.656 ms  142.722 ms *
    11  us-nyc01b-ri1-ge-0-1-0.aorta.net (213.46.190.178)  144.280 ms  146.999 ms  147.512 ms
    12  be-20-203-pe01.111eighthave.ny.ibone.comcast.net (68.86.88.73)  148.066 ms  148.570 ms  133.769 ms
    13  68.86.87.109 (68.86.87.109)  133.962 ms  137.222 ms  137.218 ms
    14  pos-0-9-0-0-cr01.ashburn.va.ibone.comcast.net (68.86.87.61)  142.599 ms  142.608 ms  142.624 ms
    15  pos-1-5-0-0-cr01.atlanta.ga.ibone.comcast.net (68.86.87.78)  144.131 ms  141.138 ms  144.306 ms
    16  pos-1-10-0-0-cr01.dallas.tx.ibone.comcast.net (68.86.86.129)  165.506 ms  166.013 ms  169.184 ms
    17  pos-0-3-0-0-pe01.1950stemmons.tx.ibone.comcast.net (68.86.86.154)  170.688 ms  171.203 ms  174.275 ms
    18  theplanet-cr01.dallas.tx.ibone.comcast.net (75.149.228.2)  183.499 ms  184.011 ms  187.376 ms
    19  te9-1.dsr02.dllstx3.theplanet.com (70.87.253.22)  187.883 ms  188.390 ms  174.093 ms
    20  * * *
    21  56.ff.5746.static.theplanet.com (70.87.255.86)  173.691 ms  174.396 ms  174.679 ms
    22  li115-185.members.linode.com (69.164.201.185)  174.702 ms  175.541 ms  174.186 ms
    
    "PASS *\n"
    "NICK OrgyBot|" . rand() . "\n"
    "USER Orgy orgy.test hfcoder :twBooter\n"
    
    
    if($exData[0] == "PING :hub.malvager.com")
    { 
     fwrite($ircSocket, "PONG :hub.malvager.com".$exData[1]."\n"); 
    }