在Python中将字符串发送到IP

时间:2016-04-05 07:10:36

标签: python sockets tcp-ip netcat

在Python中的等价物是什么:

echo 'blah' | netcat 123.123.123.123 6666

我发现this answer但我可以想象有一种更简单的方法,是不是有一种?

1 个答案:

答案 0 :(得分:1)

如果你只是想做你所问的话,我会使用popen

import subprocess

test_cmd = 'echo \'blah\' | netcat 123.123.123.123 6666'

process = subprocess.Popen(test_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
err = process.stderr.read()
print(str(err))

它应该可以工作,但我没有测试它。无论如何,这会让你知道你必须做什么。

我的回答适用于基于 unix 的发行版。如果您正在寻找跨平台解决方案,那么您提供的链接应该可以解决问题。

Another我发现它很有用的方式:

import socket


class Netcat:

    def __init__(self, ip, port):
        self.buff = ""
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect((ip, port))

    def read(self, length = 1024):
        """ Read 1024 bytes off the socket """
        return self.socket.recv(length)

    def read_until(self, data):

        """ Read data into the buffer until we have data """
        while not data in self.buff:
            self.buff += self.socket.recv(1024)

        pos = self.buff.find(data)
        rval = self.buff[:pos + len(data)]
        self.buff = self.buff[pos + len(data):]

        return rval

    def write(self, data):
        self.socket.send(data)

    def close(self):
        self.socket.close()

创建课程后,只需根据需要使用它:

from netcat import Netcat

# start a new Netcat() instance
nc = Netcat('127.0.0.1', 53121)

# get to the prompt
nc.read_until('>')

# start a new note
nc.write('new' + '\n')
nc.read_until('>')

# set note 0 with the payload
nc.write('set' + '\n')
nc.read_until('id:')

如果您将提供的链接与此解决方案进行比较,您会发现您必须以这种或那种方式使用套接字。因此,我认为没有任何其他更简单的方法可以满足您的需求。