RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1398222
Accepted
Venen
Venen
Asked:2022-09-08 16:26:30 +0000 UTC2022-09-08 16:26:30 +0000 UTC 2022-09-08 16:26:30 +0000 UTC

使用 Lua ping 远程计算机

  • 772

对这个问题感兴趣。如果不知道脚本将在哪个操作系统上使用并且 ping 速度非常关键,如何使用 Lua 端口 ping 网络上的远程计算机/服务器?我试过这个命令io.popen(),但问题是如果计算机不可用,脚本可能会挂起,线程阻塞一段时间,这在我的情况下是不可接受的。我们需要一个简单快捷的解决方案,将远程计算机/服务器 ping 到 Lua,如果它没有立即响应,则不要等待它,而是立即切断连接并返回失败。可以通过 IP 地址和带有端口的名称进行 Ping,例如 - google.com 80 (port)。我在互联网上找不到解决此问题的方法。

ip
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Mike V.
    2022-09-08T23:19:23Z2022-09-08T23:19:23Z

    您可以考虑尝试通过套接字打开端口,如果端口可用,则连接将发生,您自己指定超时时间:

    require("socket")   
    
    local host = "87.250.250.242"
    
    local conn = socket.tcp()
    conn:settimeout(1, 't') -- таймаут 1 сек
    local res = conn:connect(host, 80)
    if res then     print("Connected")  
    else    print('Error connect')
    end
    
    conn:close()
    
    -- Name to IP
    local name = socket.dns.tohostname(host)
    print (host, name)
    -- IP to Name
    local adr = "google.com"
    local info = socket.dns.toip(adr)
    print(adr,info)
        
    

    结果:

    Connected
    87.250.250.242  ya.ru
    google.com  142.251.1.138
    
    • 2
  2. eri
    2022-09-08T16:59:50Z2022-09-08T16:59:50Z

    对于 Windows,一切都很复杂,但您可以尝试 cygwin。

    对于 Posixes (linux, poppy, bsd, cygwin)

    #!/usr/bin/env lua
    
    local M = require 'posix.sys.socket'
    
    
    if M.SOCK_RAW and M.SO_BINDTODEVICE then
       -- Open raw socket
    
       local fd, err = M.socket(M.AF_INET, M.SOCK_RAW, M.IPPROTO_ICMP)
       assert(fd, err)
    
       -- Optionally, bind to specific device
    
       local ok, err = M.setsockopt(fd, M.SOL_SOCKET, M.SO_BINDTODEVICE, 'wlan0')
       assert(ok, err)
    
       -- Create raw ICMP echo (ping) message
    
       local data = string.char(0x08, 0x00, 0x89, 0x98, 0x6e, 0x63, 0x00, 0x04, 0x00)
    
       -- Send message
    
       local ok, err = M.sendto(fd, data, {family=M.AF_INET, addr='8.8.8.8', port=0})
       assert(ok, err)
    
       -- Read reply
    
       local data, sa = M.recvfrom(fd, 1024)
       assert(data, sa)
    
       if data then
          print('Received ICMP message from ' .. sa.addr)
       end
    end
    

    要定义名称,请添加

    r, err = M.getaddrinfo('www.lua.org', 'http', {family=M.AF_INET, socktype=M.SOCK_STREAM})
    r[1].addr
    

    要设置超时,您需要在此代码中添加选择和非阻塞套接字。

    https://luaposix.github.io/luaposix/examples/ping.lua.html https://luaposix.github.io/luaposix/examples/socket.lua.html

    Ping 可以在没有端口的情况下工作,但如果我们谈论的是同步扫描攻击,那么这是一个不同的代码。

    在这种情况下,您可以使用更简单的方法,luasocket但在超时之前会出现阻塞。

    • 0

相关问题

  • 为什么启用 OpenVPN 时没有互联网?[关闭]

  • 将流量重定向到另一个本地 IP

  • 网络中的子网划分

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5