当前位置: 首页 > 面试题库 >

Netcat在Python中的实现

魏煜祺
2023-03-14
问题内容

我找到了它并以它为基础,但它开箱即用时却无法正常工作。我的目标也是将其视为程序包而不是命令行实用程序,因此我的代码更改将反映出来。

class Netcat:
    def __init__(self, hostname, port):
        self.hostname = hostname
        self.port = port
    def send(self, content):
    self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.socket.connect((self.hostname, self.port))
    self.socket.setblocking(0)
    result = '';
    read_ready, write_ready, in_error = select.select([self.socket], [], [self.socket], 5)
    if(self.socket.sendall(content) != None):
        return
    while(1):
        buffer = ''
        try:                
            buffer = self.socket.recv(128)
            while(buffer != ''):
                result += buffer
                try:
                    buffer = self.socket.recv(128)
                except socket.error as err:
                    print (err, type(err))
                    buffer = ''
            if(buffer == ''):
                break
        except socket.error as err:
            print (err, type(err))
        if(buffer == ''):
            break
    return result

当我向设备发送基本命令时,它将返回以下内容。

50PMA-019 Connection Open
Atten #1 = 63dB

我的代码读取第一行,但是随后出现错误消息,表明连接暂时不可用,并且没有获得第二行。如果我将其更改为阻塞,它只会阻塞并且永远不会返回。有什么想法吗?


问题答案:

如果您只使用它是否有效nc

我认为您应该尝试一些更简单的方法:

import socket

def netcat(hostname, port, content):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((hostname, port))
    s.sendall(content)
    s.shutdown(socket.SHUT_WR)
    while 1:
        data = s.recv(1024)
        if data == "":
            break
        print "Received:", repr(data)
    print "Connection closed."
    s.close()

shutdown之所以加入此通话,是因为您的设备可能正在等待您说完数据发送。(这有点奇怪,但是有可能。)



 类似资料:
  • Netcat 是一款简单的Unix工具,使用UDP和TCP协议。 它是一个可靠的容易被其他程序所启用的后台操作工具,同时它也被用作网络的测试工具或黑客工具。 使用它你可以轻易的建立任何连接。内建有很多实用的工具。

  • 本文向大家介绍Linux中Netcat命令整理,包括了Linux中Netcat命令整理的使用技巧和注意事项,需要的朋友参考一下 netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。 netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想

  • 问题内容: 我正在尝试使用可以通过Google Authenticator应用程序 生成的一次性密码。 Google身份验证器的功能 基本上,Google身份验证器实现两种类型的密码: HOTP- 基于HMAC的一次性密码,这意味着密码会随RFC4226的每次调用而更改,并且 TOTP- 基于时间的一次性密码,每30秒更改一次(据我所知)。 Google身份验证器也可以在此处作为开源使用:code

  • 上面是我在Python中的Gauss-Seidel方法。由于某种原因,即使在矩阵A是严格对角占优的情况下,即使在50000次迭代后,它也不收敛。下面是在MATLAB中工作的相同实现: 我犯了什么错误?我认为它是在TriSolve方法中,因为如果我用常规的LU求解器(如np.linalg.solve)替换它,它就能工作。为什么三角解的行为不像这里想要的那样?

  • 本文向大家介绍在python shell中运行python文件的实现,包括了在python shell中运行python文件的实现的使用技巧和注意事项,需要的朋友参考一下 最近在学习flask开发,写好程序后需要在python shell中运行测试功能。专门抽时间研究了下,总结以防止以后遗忘。 这是测试文件的结构,python_example主文件夹,下面有example.py和一个subexam

  • 问题内容: 我正在尝试使用网站的OAuth,该网站要求签名方法仅是“ HMAC-SHA1”。 我想知道如何在Python中实现此功能? 问题答案: 假单胞菌: 签名错误通常驻留在基本字符串中,请确保您理解这一点(如OAuth1.0规范在此处所述:http://tools.ietf.org/html/draft-hammer- oauth-10#section-3.4 。 1)。 以下输入用于生成签