Encoding.ASCII.GetBytes similar for Python ?

Discussion in 'Python' started by Rui, Sep 22, 2008.

  1. Rui

    Rui Guest

    Hi, how can i do what Encoding.ASCII.GetBytes (in .net, c#) does with
    the strings. I am trying to query some dns server to check its
    response using udp sockets. Some of the source below:

    # encoding: utf8
    import socket
    import sys
    import struct

    IP_PORT = 53
    server_host = ('4.2.2.1', IP_PORT)
    transaction_id = "Q1"
    TIMEOUT = 5

    type_string =
    "\u0001\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000"
    trailer_string = "\u0000\u0000\u0001\u0000\u0001"

    address = 'google.com'
    url_name_start, domain_name = address.split(".")

    # Query format copied from the C# example.
    #QueryString = TransactionID1 + TypeString + (char)URLNameStart.Length
    + URLNameStart + (char)DomainName.Length + DomainName+ TrailerString;
    query = (transaction_id + type_string + str(len(url_name_start)) +
    url_name_start +
    str(len(domain_name)) + domain_name + trailer_string)
    print query

    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.settimeout(TIMEOUT)
    sock.connect(server_host)

    sock.send(query)
    data = sock.recv(512)

    for data_item in data:
    try:
    print chr(data_item)
    except:
    print data_item


    But it just returns trash:

    >python dns_checker.py

    Q1\u0001\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u00006google3com
    \u0000\
    u0000\u0001\u0000\u0001
    Q
    1
    Ã
    â—„






    Any advice ? Thanks!
     
    Rui, Sep 22, 2008
    #1
    1. Advertising

  2. On Mon, 22 Sep 2008 04:23:09 -0700, Rui wrote:

    > Hi, how can i do what Encoding.ASCII.GetBytes (in .net, c#) does with
    > the strings. I am trying to query some dns server to check its response
    > using udp sockets. Some of the source below:
    >
    > # encoding: utf8
    > import socket
    > import sys
    > import struct
    >
    > IP_PORT = 53
    > server_host = ('4.2.2.1', IP_PORT)
    > transaction_id = "Q1"
    > TIMEOUT = 5
    >
    > type_string =
    > "\u0001\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000"
    > trailer_string = "\u0000\u0000\u0001\u0000\u0001"


    Are you sure you want normal byte strings with *that* content!?

    In [90]: s = "\u0000\u0000\u0001\u0000\u0001"

    In [91]: len(s)
    Out[91]: 30

    In [92]: print s
    \u0000\u0000\u0001\u0000\u0001

    This is not 5 unicode characters but 30 ASCII characters. But why using
    unicode anyway? I guess the DNS server expects bytes and not unicode
    characters.

    > address = 'google.com'
    > url_name_start, domain_name = address.split(".")
    >
    > # Query format copied from the C# example. #QueryString = TransactionID1
    > + TypeString + (char)URLNameStart.Length + URLNameStart +
    > (char)DomainName.Length + DomainName+ TrailerString; query =
    > (transaction_id + type_string + str(len(url_name_start)) +
    > url_name_start +
    > str(len(domain_name)) + domain_name + trailer_string)
    > print query
    >
    > sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    > sock.settimeout(TIMEOUT)
    > sock.connect(server_host)
    >
    > sock.send(query)
    > data = sock.recv(512)
    >
    > for data_item in data:
    > try:
    > print chr(data_item)
    > except:
    > print data_item


    This will always end up in the ``except`` branch because `data` is a
    string and `chr()` expects integers. Any chance you wanted `ord()`
    instead?

    When you print out "trash" please use `repr()` so we can see what trash
    *exactly* you get.

    Ciao,
    Marc 'BlackJack' Rintsch
     
    Marc 'BlackJack' Rintsch, Sep 22, 2008
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Tiraman
    Replies:
    0
    Views:
    818
    Tiraman
    May 10, 2004
  2. Andrew
    Replies:
    5
    Views:
    6,986
    John C. Bollinger
    Sep 28, 2004
  3. Replies:
    2
    Views:
    905
  4. eeh

    String getBytes()

    eeh, Apr 23, 2007, in forum: Java
    Replies:
    3
    Views:
    884
    Lothar Kimmeringer
    Apr 23, 2007
  5. Phil C.
    Replies:
    4
    Views:
    411
    Phil C.
    Feb 24, 2005
Loading...

Share This Page