CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 5 of 5
  1. #1
    Join Date
    Mar 2010
    Posts
    3

    Thumbs down Can't Listen to Port 80

    I am attempting to create a socket listener in a Windows application using a System.Net.Sockets.Socket but I could not bind to port 80 on my Windows 7 machine, I could bind to any other port without issue but attempting to bind to 80 always resulted in:

    an attempt was made to access a socket in a way forbidden by its access permissions

    I discovered that IIS running locally locked up port 80 and that I had to move IIS to another port - you can read how to d os by going to http://www.ultimateproxylist.com/ChangingIIS.aspx

    The problem I still have - even after moving IIS off of Port 80 - is that no listener is actually working. I even grabbed the following code sample directly off the MSDN site and even IT does not work! I am on a Windows 7 machine - any ideas?!?

    if (!HttpListener.IsSupported)
    {
    Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
    return;
    }

    // Create a listener.
    HttpListener listener = new HttpListener();

    // Add the prefixes.
    listener.Prefixes.Add("http://*:80/");
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request.
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer, 0, buffer.Length);
    // You must close the output stream.
    output.Close();
    listener.Stop();

  2. #2
    Join Date
    Dec 2007
    Posts
    16

    Re: Can't Listen to Port 80

    I have another approach which works for me to sniff a network


    Code:
                    string ip1 = @"127.0.0.1";
                    socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                    byte[] buffer = new byte[2048];
                    //SocketPair socketpair = new SocketPair(socket, buffer);
                    //socket.Blocking = true;
                    socket.Bind(new IPEndPoint(IPAddress.Parse(ip1), 80));
                    socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
                    byte[] IN = new byte[4] { 1, 0, 0, 0 };
                    byte[] OUT = new byte[4];
    
                    int ret_code = socket.IOControl(IOControlCode.ReceiveAll, IN, OUT);
    
                    ret_code = OUT[0] + OUT[1] + OUT[2] + OUT[3];
                    //if (ret_code != 0)
                    //    ret_val = false;
    
                    socket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(Onreceive), null);
    ....

  3. #3
    Join Date
    Mar 2010
    Posts
    3

    Re: Can't Listen to Port 80

    Thank you for your code sample - I am testing it out now. When I get to the following line:

    int ret_code = socket.IOControl(IOControlCode.ReceiveAll, IN, OUT);

    I get an invalid argument (10022) socket exception. Any ideas on why that does not work?

  4. #4
    Join Date
    Dec 2007
    Posts
    16

    Re: Can't Listen to Port 80

    the IP is not valid ...use ipconfig and assign a valid IP....

  5. #5
    Join Date
    Mar 2010
    Posts
    3

    Re: Can't Listen to Port 80

    As it turns out, it was the byte[] IN array that was thei ssue - here is the correct code:

    Code:
    mainSocket = new Socket(AddressFamily.InterNetwork,
                            SocketType.Raw, ProtocolType.IP);
    
                //Bind the socket to the selected IP address
                mainSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.7"), 80));
    
                //Set the socket  options
                mainSocket.SetSocketOption(SocketOptionLevel.IP,            //Applies only to IP packets
                                           SocketOptionName.HeaderIncluded, //Set the include the header
                                           true);                           //option to true
    
                byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
                byte[] byOut = new byte[4] { 1, 0, 0, 0 }; //Capture outgoing packets
    
                //Socket.IOControl is analogous to the WSAIoctl method of Winsock 2
                mainSocket.IOControl(IOControlCode.ReceiveAll,              //Equivalent to SIO_RCVALL constant
                    //of Winsock 2
                                     byTrue,
                                     byOut);
    
                //Start receiving the packets asynchronously
                mainSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
                    new AsyncCallback(OnReceive), null);

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured