在过去,我们使用telnet来查看远程主机上的端口是否已打开:telnet hostname port会尝试连接到任何主机上的任何端口,并让您访问原始TCP流。

这些几天来,我使用的系统未安装telnet(出于安全原因),并且默认情况下会阻止所有主机的所有出站连接。随着时间的流逝,很容易失去对哪些端口打开了哪些主机的跟踪。

是否有另一种方法可以测试远程系统上的端口是否打开–使用数量有限的Linux系统软件包已安装,并且telnet不可用?

评论

相关:在SO
检查远程主机上一个端口的状态
我遇到了同样的问题。 @Subhranath Chunder的回答如下。但是,然后我发现安装Telnet是运行brew install telnet的一个小问题。因此,我希望Linux用户可以使用yum和apt-get进行相同操作。

如果“默认情况下阻止与所有主机的所有出站连接”,将无法执行此类测试-您处于离线状态

#1 楼

Bash能够访问TCP和UDP端口已有一段时间。在手册页中:

/dev/tcp/host/port
    If host is a valid hostname or Internet address, and port is an integer port number
    or service name, bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer port number
    or service name, bash attempts to open a UDP connection to the corresponding socket.


所以您可以使用类似这样的东西:

xenon-lornix:~> cat < /dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_6.2p2 Debian-6
^C pressed here


Taa Daa!

评论


这在MinGW中似乎也起作用。例如,192.168.2.100上的远程VNC服务器通过使用“ cat
– Peter Mortensen
15年7月21日在11:26



@lornix,好,但是在这种情况下,我必须使用不带-z选项的nc来获得相同的结果,但仍然无法正常工作:#nc -v -w5 127.0.0.1 18080连接到127.0.0.1 18080端口[tcp / *]成功! #cat
–亚历山大
16年6月14日在7:09

@Alexandr ...实际上,“挂起没有任何结果”是几乎可以预期的行为。猫正在等待输入。 nc具有额外的智能功能,使其能够感知无数据挂起并停止尝试。猫不是那么聪明。尝试cat
– lornix
16年6月14日在8:44

@lornix,非常感谢您的解释!现在限制很明确了。我认为使用nc应该是检查端口的首选方法。

–亚历山大
16年6月14日在14:29

当使用未安装任何东西的Docker容器时,这非常有用。能够快速验证该容器可以通过DNS访问非容器化的数据库。示例:cat
–迈克尔·霍布斯(Michael Hobbs)
18-10-24在14:09

#2 楼

很好,很冗长!从手册页。
单个端口:

nc -zv 127.0.0.1 80



nc -zv 127.0.0.1 22 80 8080


端口范围:

nc -zv 127.0.0.1 20-30


评论


似乎是最好的答案,谢谢。 ;-)

–lpapp
2014年11月26日15:42

当在Ubuntu 14.04(Trusty Tahr)上尝试将远程服务器(相同的LAN)用于关闭的端口(在127秒后超时)时,此方法挂起-因此不适用于脚本。不过,对于端口已打开的服务,它确实起作用。使用选项“ -w2”可能是解决方案。

– Peter Mortensen
15年7月21日在12:36



对UDP端口使用-u选项。

– Efren
16-09-21在0:10

在6.4版本的ncat -z上无法识别。我没有z就可以做

–smishra
17年4月6日在17:18

您可以使用以下命令检查多个范围:nc -zv 127.0.0.1 22,80,8080,20-30,443-446(nc版本:1.107-4)。

– bobbel
17年7月6日在16:55

#3 楼

Netcat是一个有用的工具:

nc 127.0.0.1 123 &> /dev/null; echo $?

如果端口123打开,将输出0,如果端口123关闭则将输出1

评论


这是一个比我自己的答案更为优雅和可脚本化的答案。对于我来说,不幸的是,那些拒绝使用telnet的,具有安全意识的系统管理员也拒绝了nc(尽管–奇怪的是–没有curl或wget)。

–史蒂夫HHH
13年7月19日在19:51

是的,那是完全任意和愚蠢的。

–膝盖
13年7月19日在20:10

让FOR语句开始!

–乍得·哈里森(Chad Harrison)
13年7月19日在21:37

在Ubuntu 14.04(Trusty Tahr)上尝试将远程服务器(相同的LAN)用于关闭的端口(在大约127秒后超时)时,此方法挂起-因此不适用于脚本。但是对于打开端口并返回0的服务,它确实起作用。可以使用选项“ -w2”作为解决方案。

– Peter Mortensen
15年7月21日在13:06



我认为-G 2更适合TCP超时

– A B
15年8月24日在21:45

#4 楼

不使用其他工具(例如socat)的最简单方法如上述@lornix的答案所述。这只是为了添加一个实际示例,说明如果您想测试另一台服务器是否具有可通过命令行访问的给定端口,那么将如何在Bash中使用psuedo设备/dev/tcp/...

示例

假设我的网络上有一个名为skinner的主机。 ,echo > /dev/...是因为如果不这样做,则通过测试连接断开,您会看到这些类型的消息。

$ (echo > /dev/tcp/skinner/22) >/dev/null 2>&1 \
    && echo "It's up" || echo "It's down"
It's up

$ (echo > /dev/tcp/skinner/222) >/dev/null 2>&1 && \
    echo "It's up" || echo "It's down"
It's down


这些可以t只是被重定向到(echo > /dev/...),因为它们来自试图将数据写到设备/dev/null的尝试。因此,我们在一个子命令(即/dev/tcp)中捕获了所有输出,并重定向了该子命令的输出。

评论


太好了希望它能获得最高票。我只在页面下半部分读过这本书,因为在关闭它之前我不小心滚动了它。

–Still.Tony
15年2月12日在13:44

@ Okuma.Tony-是的,Q总是有问题,答案很多8-)。感谢您的反馈,不胜感激。

–slm
2015年2月12日在14:26

#5 楼

我发现curl可以通过与telnet类似的方式完成工作,并且curl甚至可以告诉您侦听器期望的协议。

从主机名和端口构造HTTP URI作为第一个参数curl。如果curl可以连接,它将报告协议不匹配并退出(如果侦听器不是Web服务)。如果curl无法连接,它将超时。

例如,主机10.0.0.99上的端口5672被防火墙关闭或阻止:

$ curl http://10.0.0.99:5672
curl: (7) couldn't connect to host


但是,从另一个系统,可以访问主机10.0.0.99上的端口5672,并且似乎正在运行AMQP侦听器。

$ curl http://10.0.0.99:5672
curl: (56) Failure when receiving data from the peer
AMQP


这很重要区分不同的消息:第一个失败是因为curl无法连接到端口。第二个失败是成功测试,尽管curl期望使用HTTP侦听器而不是AMQP侦听器。

评论


如果curl不可用,则可能是wget。 wget -qS -O- http://ip.add.re.ss:port应该有效地做同样的事情。

–用户
13年7月19日在17:52



甚至可以与主机名一起使用,例如。我的主人:22。

–에이바
2014-2-25在16:17



这可能是不正确的。我正在运行一个tomcat服务,但收到404错误。 #curl -k 192.168.194.4:6443 Apache Tomcat / 7.0.34-错误报告</ title> <style> <!-H1 --- HR {color:#525D76;} -> </ style> </ head> <body> <h1> HTTP状态404-/ </h1> <HR size =“ 1” noshade =“ noshade”> <p> <b>类型</b>状态报告</p> <p> <b>消息</b> <u> / </u> </p> <p> <b>说明</b> <u>请求的资源不可用。 </u> </p> <HR size =“ 1” noshade =“ noshade”> <h3> Apache Tomcat / 7.0.34 </h3> </ body> </ html> <br /> <br /> –穆罕默德·沙希德·西迪基(Mohammad Shahid Siddiqui) <br /> 2015年6月2日,6:30 <br /><hr />用类似的方法查看我的帖子。 <br /> <br /> – Kenorb <br /> 2015年12月30日14:49在<br /><hr /></div></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #6 楼</h3><pre><code>[admin@automation-server 1.2.2]# nc -v -z -w2 192.168.193.173 6443 nc: connect to 192.168.193.173 port 6443 (tcp) failed: Connection refused [admin@automation-server 1.2.2]# nc -v -z -w2 192.168.194.4 6443 Connection to 192.168.194.4 6443 port [tcp/sun-sr-https] succeeded! </code></pre> <br /> <br />希望它可以解决您的问题:) <br /><br /><div class='comment'><h4 style='font-size: 14px;background: #f5f5f5;color: #2fa4e7;padding: 10px;margin: 10px 0;'>评论</h4><hr />是的,这样更好-封闭端口几乎立即超时。 <br /> <br /> – Peter Mortensen <br /> 15年7月21日在12:38 <br /><hr />这是否总是使用TCP还是有办法让它检查UDP? <br /> <br /> – kmoe <br /> 16年1月2日在17:09 <br /><hr /></div></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #7 楼</h3>这是单行代码:<br /> <br /> <pre><code></dev/tcp/localhost/11211 && echo Port is open || echo Port is closed </code></pre> <br /> <br />使用@lornix答案中解释的Bash语法。<br /> <br />有关更多信息,请检查:高级Bash脚本指南:第29章。<code>/dev</code>和<code>/proc</code>。<br /><br /><div class='comment'><h4 style='font-size: 14px;background: #f5f5f5;color: #2fa4e7;padding: 10px;margin: 10px 0;'>评论</h4><hr />封闭端口的超时时间是多少? <br /> <br /> –提洛 <br /> 18/12/12在17:42 <br /><hr /></div></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #8 楼</h3>我整天都在努力,因为这些答案似乎都不适合我。问题是最新版本的<code>nc</code>不再具有<code>-z</code>标志,而当主机不可访问时,通过TCP(如@lornix和@slm)的直接访问失败。我最终找到了该页面,在这里我最终找到的不是一个工作示例,而是两个示例:标志)<br /> <br /> <br /> <code>nc -w1 127.0.0.1 22 </dev/null</code> <br />(<code>-w</code>命令负责超时,其余部分来自@slm)<br /> <br /> <br />然后,只需使用<code></dev/null</code>和/或<code>-z</code>(甚至<code>timeout 1 bash -c '(echo > /dev/tcp/127.0.0.1/22) >/dev/null 2>&1'</code>)来提取结果。希望有人会发现此信息有用。<br /><br /></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #9 楼</h3>结合@kenorb和@Azukikuru的答案,您可以测试端口的打开/关闭/防火墙。<br /> <br /> <pre><code>timeout 1 bash -c '</dev/tcp/127.0.0.1/22 && echo Port is open || echo Port is closed' || echo Connection timeout </code></pre> <br /> <br />另一种使用curl的方法可以到达任何端口<br /> <br /> <pre><code>curl telnet://127.0.0.1:22 </code></pre> <br /><br /></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #10 楼</h3>这是一个根据系统上安装的功能选择其中一种方法的函数:<br /> <br /> <pre><code># Check_port <address> <port> check_port() { if [ "$(which nc)" != "" ]; then tool=nc elif [ "$(which curl)" != "" ]; then tool=curl elif [ "$(which telnet)" != "" ]; then tool=telnet elif [ -e /dev/tcp ]; then if [ "$(which gtimeout)" != "" ]; then tool=gtimeout elif [ "$(which timeout)" != "" ]; then tool=timeout else tool=devtcp fi fi echo "Using $tool to test access to :" case $tool in nc) nc -v -G 5 -z -w2 ;; curl) curl --connect-timeout 10 http://: ;; telnet) telnet ;; gtimeout) gtimeout 1 bash -c "</dev/tcp// && echo Port is open || echo Port is closed" || echo Connection timeout ;; timeout) timeout 1 bash -c "</dev/tcp// && echo Port is open || echo Port is closed" || echo Connection timeout ;; devtcp) </dev/tcp// && echo Port is open || echo Port is closed ;; *) echo "no tools available to test port ";; esac } export check_port </code></pre> <br /><br /><div class='comment'><h4 style='font-size: 14px;background: #f5f5f5;color: #2fa4e7;padding: 10px;margin: 10px 0;'>评论</h4><hr />您为什么要设置工具,仅在case语句中稍后使用它。检查哪个工具可用并在if块中立即使用它难道不是很简单吗? <br /> <br /> – Mark Lybarger <br /> 19年11月5日15:46 <br /><hr />好点-我急着把它们放在一起-按照您的建议折叠代码确实很有意义。另一方面,如果需要在代码的另一部分中做更多的事情,设置工具可能会很有用。 <br /> <br /> –罗伯特·博伊德 <br /> 5月14日15:05 <br /><hr /></div></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #11 楼</h3>它不应该在您的包装盒上提供,但请尝试使用<code>nmap</code>。<br /><br /><div class='comment'><h4 style='font-size: 14px;background: #f5f5f5;color: #2fa4e7;padding: 10px;margin: 10px 0;'>评论</h4><hr />nmap是一个很好的工具,但是在这些系统上不可用。我希望能找到一种使用大多数Linux安装中可用的现有工具的方法,而不是下载nmap,对其进行编译,将其安装到我的主目录中,然后将其复制到所有其他系统中。 <br /> <br /> –史蒂夫HHH <br /> 13年7月19日在17:16 <br /><hr /></div></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #12 楼</h3>供参考,扩展@peperunas的答案:<br /> <br />使用nmap进行测试的方法是:<br /> <br /> <pre><code>nmap -p 22 127.0.0.1 </code></pre> <br /> <br />(上面的示例使用本地主机出于演示目的)<br /><br /></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #13 楼</h3>如果已安装卷曲:<br /> <pre><code>curl -v telnet://$host:$port/$path </code></pre> <br /><br /><div class='comment'><h4 style='font-size: 14px;background: #f5f5f5;color: #2fa4e7;padding: 10px;margin: 10px 0;'>评论</h4><hr />(1)我假设您的意思是curl -v telnet:// 、:和(final)/是文字,而$ host和$ port是所讨论主机的名称/地址和端口的占位符有问题的号码。用户应该为$ path使用什么? (2)如果端口是开放的,但未实现HTTP,则可以预期此命令将失败。那么,如何区分由于端口未打开而导致的失败和因端口不是HTTP而导致的失败? …(续) <br /> <br /> –斯科特 <br /> 10月14日21:13 <br /><hr />(续)…(3)卷曲http:// host:port已作为答案给出(在第一点上很明显,在第二点上已经讨论过)。您是说curl -v telnet:胜于curl http:为什么? (4)还有一个答案表明curl http:// host:port,甚至还有一个建议卷曲curl telnet:// host:port。您的答案对那些较早的答案有什么帮助? ………………………………………………………………………………………………………………请勿回覆;编辑您的答案,使其更清晰,更完整。 <br /> <br /> –斯科特 <br /> 10月14日21:13 <br /><hr /></div></div><div class='answer'><h3 style='font-size: 16px;background: #434a54;color: #fff;padding: 10px;margin: 10px 0;'> #14 楼</h3>如果您要在系统上进行更多测试,则可以使用我们的测试工具dda-serverspec(https://github.com/DomainDrivenArchitecture/dda-serverspec-crate)完成此类任务。您可以定义期望值<br /> <br /> <pre><code>{:netcat [{:host "mywebserver.com" :port "443"} {:host "telnet mywebserver.com" :port "80"} {:host "telnet mywebserver.com" :port "8443"}]} </code></pre> <br /> <br />并针对localhost或针对远程主机(通过ssh连接)测试这些期望值。对于远程测试,您必须定义一个目标:<br /> <br /> <pre><code>{:existing [{:node-name "test-vm1" :node-ip "35.157.19.218"} {:node-name "test-vm2" :node-ip "18.194.113.138"}] :provisioning-user {:login "ubuntu"}} </code></pre> <br /> <br />您可以使用<code>java -jar dda-serverspec.jar --targets targets.edn serverspec.edn</code>进行测试<br /> <br />在我们使用的引擎盖下上面提到的网猫... <br /><br /></div> </div> <div class="post-footer"><b>本文标签:</b> <a href="http://129.226.226.195/tags/linux/" target="_blank"> linux </a> <a href="http://129.226.226.195/tags/networking/" target="_blank"> networking </a> <a href="http://129.226.226.195/tags/port/" target="_blank"> port </a> </div> </div> <div class="box boxmt nearbypost"> <div class="alignleft"><a href="http://129.226.226.195/post/13572.html" >如何检查启用/安装了哪些Apache模块?</a></div> <div class="alignright"><a href="http://129.226.226.195/post/13574.html">如果文件不存在,如何使rm不给出错误?</a></div> </div> </div> <div class="aside"> <div class="box widget" id="divTags"> <div class="title">标签列表</div><ul><li><a href="http://129.226.226.195/tags/java/">java<span class="tag-count"> (11)</span></a></li> <li><a href="http://129.226.226.195/tags/r/">r<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/r-faq/">r-faq<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/javascript/">javascript<span class="tag-count"> (17)</span></a></li> <li><a href="http://129.226.226.195/tags/jquery/">jquery<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/asynchronous/">asynchronous<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/php/">php<span class="tag-count"> (17)</span></a></li> <li><a href="http://129.226.226.195/tags/mysql/">mysql<span class="tag-count"> (7)</span></a></li> <li><a href="http://129.226.226.195/tags/sql/">sql<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/html/">html<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/regex/">regex<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/arrays/">arrays<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/variables/">variables<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/warnings/">warnings<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/language-agnostic/">language-agnostic<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/c%2B%2B/">c++<span class="tag-count"> (9)</span></a></li> <li><a href="http://129.226.226.195/tags/c%2B%2B-faq/">c++-faq<span class="tag-count"> (8)</span></a></li> <li><a href="http://129.226.226.195/tags/parsing/">parsing<span class="tag-count"> (2)</span></a></li> <li><a href="http://129.226.226.195/tags/debugging/">debugging<span class="tag-count"> (5)</span></a></li> <li><a href="http://129.226.226.195/tags/c/">c<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/error-handling/">error-handling<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/python/">python<span class="tag-count"> (10)</span></a></li> <li><a href="http://129.226.226.195/tags/pandas/">pandas<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/android/">android<span class="tag-count"> (3)</span></a></li> <li><a href="http://129.226.226.195/tags/list/">list<span class="tag-count"> (3)</span></a></li> </ul> </div><div class="box widget" id="divPrevious"> <div class="title">最近发表</div><ul><li><a href="http://129.226.226.195/post/18326.html">IP地址错误的错误掩码</a></li> <li><a href="http://129.226.226.195/post/18325.html">在Cisco IOS中自动进行配置备份(每分钟)</a></li> <li><a href="http://129.226.226.195/post/18324.html">VRRP和HSRP有什么区别?</a></li> <li><a href="http://129.226.226.195/post/18323.html">IP地址如何映射到MAC地址?</a></li> <li><a href="http://129.226.226.195/post/18322.html">网站可以识别我的MAC地址吗?</a></li> <li><a href="http://129.226.226.195/post/18321.html">在STP中如何选择根桥?</a></li> <li><a href="http://129.226.226.195/post/18320.html">为什么要使用三根以太网电缆将交换机连接到路由器?</a></li> <li><a href="http://129.226.226.195/post/18319.html">为什么10.1.255.255是无效的广播地址?</a></li> <li><a href="http://129.226.226.195/post/18318.html">为什么将IP地址分配给每个接口而不是设备?这将意味着什么?</a></li> <li><a href="http://129.226.226.195/post/18317.html">为什么Visual Studio 2013不愿意运行我的Web性能/负载测试?</a></li> <li><a href="http://129.226.226.195/post/18316.html">对测试代码了解太多会不利吗?</a></li> <li><a href="http://129.226.226.195/post/18315.html">如何隔离错误?</a></li> <li><a href="http://129.226.226.195/post/18314.html">如何使用Selenium和WebDriver清除localStorage</a></li> <li><a href="http://129.226.226.195/post/18313.html">评估测试项目</a></li> <li><a href="http://129.226.226.195/post/18312.html">我如何说服管理层我们需要一个正式的质量保证部门?</a></li> <li><a href="http://129.226.226.195/post/18311.html">FluentWait与WebDriverWait有何不同?</a></li> <li><a href="http://129.226.226.195/post/18310.html">简历和求职建议-从开发到测试的职业转变</a></li> <li><a href="http://129.226.226.195/post/18309.html">您如何等待Selenium 2中的jQuery Ajax调用完成</a></li> <li><a href="http://129.226.226.195/post/18308.html">在持续开发下测试应用程序</a></li> <li><a href="http://129.226.226.195/post/18307.html">Selenium的页面加载默认超时是多少?</a></li> <li><a href="http://129.226.226.195/post/18306.html">IT项目中软件测试的真正商业价值是什么?</a></li> <li><a href="http://129.226.226.195/post/18305.html">系统测试与系统集成测试(SIT)有何不同?</a></li> <li><a href="http://129.226.226.195/post/18304.html">如何找到我们的“质量保证流程”的弱点?</a></li> <li><a href="http://129.226.226.195/post/18303.html">测试人员应如何处理生产中发现的错误?</a></li> <li><a href="http://129.226.226.195/post/18302.html">如果我不使用TDD但想过渡到敏捷,那我应该回去创建那些单元测试吗?</a></li> <li><a href="http://129.226.226.195/post/18301.html">代码覆盖率和测试覆盖率有什么区别?</a></li> <li><a href="http://129.226.226.195/post/18300.html">当团队想要忽略关键但难以重现的错误时,我应该如何应对</a></li> <li><a href="http://129.226.226.195/post/18299.html">测试人员应该修复错误吗?</a></li> <li><a href="http://129.226.226.195/post/18298.html">审核测试自动化代码的良好实践</a></li> <li><a href="http://129.226.226.195/post/18297.html">质量检查人员应该能够编写测试代码吗?</a></li> </ul> </div> <div class="box widget" > <div class="title">随机文章</div> <ul> <li><a href="http://129.226.226.195/post/11514.html">在Android应用程序中存储用户设置的最合适方法是什么</a></li> <li><a href="http://129.226.226.195/post/12700.html">瑞萨H8系列处理器是否有任何免费或低成本的反汇编器?</a></li> <li><a href="http://129.226.226.195/post/13626.html">如何安装谷歌浏览器</a></li> <li><a href="http://129.226.226.195/post/14290.html">我们的安全审核员是个白痴。我如何给他他想要的信息?</a></li> <li><a href="http://129.226.226.195/post/14412.html">Android应用程序在哪里存储数据?</a></li> <li><a href="http://129.226.226.195/post/14585.html">单引号过滤是胡说八道吗?</a></li> <li><a href="http://129.226.226.195/post/14613.html">为什么Java不用于现代Web应用程序开发? [关闭]</a></li> <li><a href="http://129.226.226.195/post/15639.html">Why aren't we supposed to use <table> in a design?</a></li> <li><a href="http://129.226.226.195/post/15825.html">为什么没人使用(或破坏)茶花密码?</a></li> <li><a href="http://129.226.226.195/post/15950.html">专注于软件工程师的游戏</a></li> </ul> </div> </div> </div> <style> code{ padding: 2px 4px; color: #242729; background-color: #e4e6e8; border-radius: 3px; } pre{ padding: 12px; color: #242729; background-color: #e4e6e8; border-radius: 5px; overflow: auto; max-height: 600px; } pre code{ padding:0; } </style><footer class="footer"> <div class="global-width footer-box"> <div class="copyright" id="copyr"><span>声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。</span> <script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1279522828&web_id=1279522828"></script> </div> </div> <span id="go-to-top"></span> </footer> </body> </html><!--40.66 ms , 11 query , 1590kb memory , 0 error-->