the fast, reliable localhost tunneling solution


nishad.index.html-muhammad123098.pagekite.me

By Bjarni R. Einarsson 2024-11-12, 08:15

<!DOCTYPE html> <html lang="ha"> <head> <meta charset="UTF-8"> <title>Nishad - Raba Hotuna da Rubutu</title> <meta name="description" content="Nishad yana ba masu amfani damar raba hotuna da rubutu. Ziyarci shafin mu don samun sabbin abubuwa."> <meta name="keywords" content="Nishad, hotuna, rubutu, raba, shafin yanar gizo"> <meta name="robots" content="index, follow"> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"/> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

&lt;style&gt;
    body {
        font-family: Arial, sans-serif;
    }

    header {
        background-color: #4CAF50;
        color: white;
        text-align: center;
        padding: 1em 0;
    }

    main {
        padding: 20px;
    }

    #postForm {
        margin-bottom: 20px;
    }

    #postsContainer {
        display: flex;
        flex-direction: column;
        gap: 10px;
    }

    .post {
        border: 1px solid #ccc;
        padding: 10px;
        background-color: #f9f9f9;
    }

    .likeButton, .editButton, .deleteButton, .commentButton {
        background-color: #007bff;
        color: white;
        border: none;
        padding: 5px 10px; 
        cursor: pointer;
        margin-top: 10px;
        margin-right: 5px;
    }

    .likeButton:hover, .editButton:hover, .deleteButton:hover, .commentButton:hover {
        background-color: magenta;
    }

    .likeCount, .commentList {
        margin-top: 5px;
        font-weight: bold;
    }

    .commentInput {
        display: none;
        margin-top: 10px;
    }

    .comments {
        margin-top: 10px;
    }

.fileInput { display: none; } .fileInput { display: none; }

/* Gumaka*/

body { justify-content: center; / Tsara gumakan a tsakiya / align-items: center; / Tsara gumakan a tsakiya a tsaye / height: 100vh; / Tsawon jikin shafin / background: #f0f0f0; / Launin bango / margin: 0; / Cire margin / }

    .icon-container {
        display: flex; /* Amfani da flexbox don jera gumakan a layi guda */
        gap: 20px; /* Sarari tsakanin gumakan */
    }

    .icon-container a {
        text-decoration: none; /* Cire layin gado daga gumakan */

        font-size: 40px; /* Girman gumakan */
    }

    .icon-container a:hover {
        color: #007bff; /* Launin gumakan lokacin da aka hover */
    }
 /* i */

 button {
  background-image: linear-gradient(#dafa, rebeccapurple, dodgerblue, #badada); 
 }
 i[class="fab fa-whatsapp"]
 ,[class="fa fa-phone"] {
   width: 300;
   height: 150;
   color: #4CAF50;

 background-image: linear-gradient(

cyan, rebeccapurple, blue, magenta ); }

 i[class="fa fa-comment"]
 ,[class="fa fa-envelope"] {
   color: #333;
    width: 300;
    height: 150;
    background-image: linear-gradient(

   cyan, 
   rebeccapurple,
   blue,  magenta
   );
   }

.icon-container {
display: flex;
gap: 15px; /* Domin tsari mai kyau */

}

.icon-container a { text-decoration: none; color: #333; / Launin gumakan / transition: transform 0.3s ease; / Motsin yana canza tsawon lokaci / }

.icon-container a:hover { transform: scale(1.2); / Wadannan gumakan suna girma idan aka zabe su / text-shadow: 0 0 10px rgba(0, 0, 0, 0.3); / Don ƙarin haske idan ana zaban / }

/ Optional: Motsi a hankali a lokacin da shafin ya loda / .icon-container a { animation: float 2s infinite ease-in-out; / Motsi na madauki / }

@keyframes float { 0% { transform: translateY(0px); } 50% { transform: translateY(-20px); / Motsi sama / } 100% { transform: translateY(0px); } } / A /

a { background-image: linear-gradient(

cyan, rebeccapurple, blue, magenta ); }

</style>

</head> <body>

<div class="ad"> <h2>Tallace-tallace na Kai</h2> <a href="https://example.com" target="_blank"> <img src="Hotuna/Muhammadu.jpg" alt="Tallace-tallace" style="width: 100%; max-width: 300px;"> </a> </div>

&lt;header&gt;
    &lt;h1&gt;Shafin Raba Hotuna da Rubutu&lt;/h1&gt;
&lt;/header&gt;

<h2>Maraba da Nishad!</h2> <p>Wannan shafin yana ba ku damar raba hotuna da rubutu tare da sauran masu amfani.</p>

<main> <form id="postForm"> <button type="button" class="chooseFileButton" onclick="document.getElementById('postImage').click()" style="font-size: 19px;"> <i style="font-size: 40px;" class="material-icons">camera</i><h1> Ɗauki Hoton</h1></button> <input type="file" id="postImage" name="camera" accept="image/" capture="camera" class="fileInput"> <button type="button" class="chooseFileButton" onclick="document.getElementById('postImage').click()" style="font-size: 19px;"> <i style="font-size: 40px;" class="material-icons">attachment</i><h1> Zaɓi Hoton</h1></button> <input type="file" id="postImage" accept="image/" class="fileInput"> <textarea id="postContent" placeholder="Rubuta abin da kake so..." required></textarea><button type="submit"><i style="font-size: 40px;;" class="material-icons">send</i></button> </form> <div id="postsContainer"></div> </main>

&lt;script&gt;
    document.getElementById('postForm').addEventListener('submit', function(event) {
        event.preventDefault();

        const postContent = document.getElementById('postContent').value;
        const postImage = document.getElementById('postImage').files[0];
        const postDiv = document.createElement('div');
        postDiv.classList.add('post');

        const imageElement = document.createElement('img');
        if (postImage) {
            const reader = new <a href="/wiki/FileReader/">FileReader</a>();
            reader.onload = function(e) {
                imageElement.src = e.target.result;
                imageElement.style.maxWidth = "100%";
                postDiv.appendChild(imageElement);
            };
            reader.readAsDataURL(postImage);
        }

        const contentElement = document.createElement('p');
        contentElement.textContent = postContent;
        postDiv.appendChild(contentElement);

        // Like button and count
        const likeButton = document.createElement('button');
        likeButton.innerHTML = '&lt;i style="font-size:50px;" class="fa fa-thumbs-up"&gt;&lt;/i&gt;'; // Gunki na "Like" tare da rubutu

        likeButton.classList.add('likeButton');
        const likeCount = document.createElement('div');
        likeCount.classList.add('likeCount');
        likeCount.textContent = 'Likes: 0';

        let likes = 0; // Initialize likes count
        likeButton.onclick = function() {
            likes = (likes === 0) ? 1 : 0; // Toggle likes
            likeCount.textContent = 'Likes: ' + likes; // Update likes count
        };

        postDiv.appendChild(likeButton);
        postDiv.appendChild(likeCount);

        // Comment section
        const commentButton = document.createElement('button');
        commentButton.innerHTML = '&lt;i style="color: white;" class="fa fa-comment"&gt;Comment&lt;/i&gt;';
        commentButton.classList.add('commentButton');
        postDiv.appendChild(commentButton);

        const commentInput = document.createElement('input');
        commentInput.type = 'text';
        commentInput.placeholder = 'Rubuta sharhi...';
        commentInput.classList.add('commentInput');
        postDiv.appendChild(commentInput);

        const commentList = document.createElement('div');
        commentList.classList.add('comments');
        postDiv.appendChild(commentList);

        commentButton.onclick = function() {
            commentInput.style.display = (commentInput.style.display === 'none' || commentInput.style.display === '') ? 'block' : 'none';
        };

        commentInput.addEventListener('keypress', function(event) {
            if (event.key === 'Enter' &amp;&amp; commentInput.value !== '') {
                const commentElement = document.createElement('div');
                commentElement.textContent = commentInput.value;
                commentList.appendChild(commentElement);
                commentInput.value = '';
            }
        });

        // Edit button
        const editButton = document.createElement('button');
        editButton.textContent = '🛠️️ Gyara';
        editButton.classList.add('editButton');
        postDiv.appendChild(editButton);

        editButton.onclick = function() {
            contentElement.contentEditable = true;
            contentElement.focus();
            contentElement.addEventListener('blur', function() {
                contentElement.contentEditable = false;
            });
        };

        // Delete button
        const deleteButton = document.createElement('button');
        deleteButton.innerHTML = '&lt;i class="fa fa-trash"&gt;Share&lt;/i&gt;';
        deleteButton.classList.add('deleteButton');
        postDiv.appendChild(deleteButton);

        deleteButton.onclick = function() {
            postDiv.remove();
        };

        document.getElementById('postsContainer').prepend(postDiv);
        document.getElementById('postForm').reset();
    });
&lt;/script&gt;

<h1>Domin Ƙarinn bayani</h1> <div class="icon-container"> <a href="mailto:yuktamyuktam1@gmail.com" aria-label="Email yuktamyuktam1@gmail.com"<i class="fa fa-envelope"></i> Email</a> <a href="tel:+218920517942" aria-label="Call phone +218920517942"><i class="fa fa-phone"></i> Call phone</a> <a href="smsto:+218920517942?body=message_text" aria-label="Send SMS to +218920517942"> <i class="fa fa-comment"></i> Message text </a> <a href="whatsapp://send?text=message_text&phone=+218920517942" aria-label="Send WhatsApp message to +218920517942"><i class="fab fa-whatsapp"></i> WhatsApp</a>

</body> </html>

Comments

  1. zellda said on 2011-12-20, 16:19
    No luck with that.
    Get:
    /bin/nc: invalid option -- 'X'
    when I try to connect.

    nc -h shows no x-option!
    Permalink
  2. Bjarni Rúnar Einarsson said on 2011-12-20, 16:24
    You need the OpenBSD version of netcat for these examples to work. There are other tools which can accomplish the same thing, for example corkscrew (ex. http://wiki.kartbuilding.net/index.ph...).

    Basically anything which will let you connect via. an HTTP proxy will work, you simply treat your PageKite hostname as the name of an HTTP proxy on port 443.
    Permalink
  3. Frédéric Gobry said on 2012-01-30, 19:12
    corkscrew worked quite nicely for me:

    ProxyCommand /usr/bin/corkscrew %h 443 %h %p
    Permalink
  4. Amit said on 2012-02-20, 02:40
    And it works like a charm. Beauty!
    Permalink
  5. Thiago Jung Bauermann said on 2012-02-23, 03:08
    Just FYI: I asked pagekite to listen for SSH connections on a different port than the standard one (22), and when trying to connect I got:

    nc: Proxy error: "HTTP/1.1 400 Bad request"

    When I changed pagekite to listen on port 22, it worked.
    Permalink
  6. Bjarni Rúnar Einarsson said on 2012-02-23, 09:20
    Hi Thiago!

    Note that there are two port settings that matter. One is the port setting on your local computer, where the ssh daemon is listening. Usually that is 22, but sometimes people move it. The other is the "virtual port" which is sent in the HTTP CONNECT request to PageKite - that can be anything.

    For example:

    # If sshd listens on port 23 instead of 22
    # SSH clients connect to foo.pagekite.me:22
    pagekite localhost:23 raw://foo.pagekite.me
    # config file: backend=raw-22:foo.pagekite.me:localhost:23:SECRET

    # If sshd listens on the standard port 22
    # SSH clients connect to foo.pagekite.me:23
    pagekite localhost:22 raw://foo.pagekite.me:23
    # config file: backend=raw-23:foo.pagekite.me:localhost:22:SECRET

    Hope this helps!
    Permalink
  7. Thiago Jung Bauermann said on 2012-02-23, 17:32
    Hello Bjarni!

    Indeed it worked now, using your examples as references. I must have screwed up somewhere.

    Thanks for your help!
    Permalink
  8. n00bboy said on 2012-10-20, 10:43
    I have my own sub domain SSH.example.com how would I set this up to use it instead of pagekite.me tried the tutorial on public front end but i must have messed up somewhere
    Permalink
  9. John Brisbin said on 2012-12-11, 21:07
    I seem to be able to login via ssh only using the public key authentication, no password option is offered.

    I see no mention of this limitation, how can I avoid it?

    I have seen this when pagekite is installed on a Linux host as well as a Mac host.
    Permalink
  10. Bob Solomon said on 2013-01-29, 23:47
    this works for me on port 22 but does not work on an alternative port. I have sshd configured and working to connect on that port. If I change 22 to my alternative port in .pagekite.rc I get:
    ssh_exchange_identification: Connection closed by remote host

    Permalink
  11. Bob Solomon said on 2013-01-30, 00:03
    Never mind. Read #6 above and got it.
    Permalink
  12. Lukas Zapletal said on 2013-01-30, 20:38
    FYI if you tried to get this working with ncat (non-OpenBSD nc), don't bother - it does not work.

    ProxyCommand /bin/nc --proxy-type http --proxy %h:443 %h %p
    Permalink
  13. zellda said on 2013-02-26, 09:27
    Simple!
    When I follow the guide and do a:
    $ pagekite.py --add 22 ssh:user.pagekite.me
    on the server, I can connect with:
    $ ssh user.pagekite.me
    from my Linux client. Nothing more necessary. No port or anything on the client to specify.

    Don't know if it is mentioned here. Couldn't gather that from the guide so I wrote it down for anybody having trouble to connect.
    Permalink
  14. Luke Timothy said on 2013-03-13, 22:10
    Can anyone help me configure cygwin SSH?
    Permalink
  15. Alan Brenner said on 2013-03-24, 14:44
    Under Mac OS 10.7, use /usr/bin/nc on the ProxyCommand line instead of /bin/nc, and it works fine.
    Permalink
  16. Rafal said on 2013-05-07, 15:57
    One other thing to check when you have trouble getting your .pagekite.rc read correctly -- the command line config overrides what's in the .pagekite.rc, so beware! Also, the command-line config seems not to accept the whole syntax of what can be done in the .pagekite.rc (e.g. I can't do "ssh-2222://foo.pagekite.me" or "raw-2222://foo.pagekite.me").
    Permalink
  17. Rafal said on 2013-05-07, 16:01
    Oh, to follow up to the last:

    ssh://foo.pagekite.me:2222

    does seem to do what I need when specified on the command line.
    Permalink
  18. Guillermo said on 2013-08-02, 16:51
    Couldnt get it work on my mac, followed the guide, checked for typos on the config file, i did:
    $ pagekite.py --add 22 ssh:user.pagekite.me
    $ pagekite.py user.pagekite.me
    >>> Hello! This is pagekite.py v0.5.6a. [CTRL+C = Stop]
    Connecting to front-end 173.230.155.164:443 ...
    - Protocols: http http2 http3 https websocket irc finger httpfinger raw
    - Protocols: minecraft
    - Ports: 79 80 443 843 2222 3000 4545 5222 5223 5269 5670 6667 8000 8080
    - Ports: 8081 9292 25565
    - Raw ports: 22 virtual
    Quota: You have 17458.23 MB, 13 days and 6 connections left.
    ~<> Flying localhost:22 as ssh://user.pagekite.me:22/ (HTTP proxied)
    << pagekite.py [flying] Kites are flying and all is well.
    $ ssh user.pagekite.me
    ssh_exchange_identification: Connection closed by remote host

    Of course i changed the user.pagekite.me with my own kite.
    Permalink
  19. Bob Solomon said on 2014-09-29, 19:36
    I have ssh/pagekit working.

    Question is how to connect with the client behind a (squid) proxy server..

    ssh to a normal host through squid is also working (with corkscrew).

    I can connect to the pagekite host from the proxy server, but can't figure out how to chain the PorxyCommand. Aslo tried tunneling with nc with no success.

    thanks,

    Bob
    Permalink
  20. Davíð James said on 2014-12-05, 07:40
    Trying to connect to my pi via ssh on adroid. I can connect locally and I'm using your version of connectbot.

    What am I doing wrong?

    Connecting to foo.pagekite.me:22 via ssh
    Connecting via proxy: foo.pagekite.me:443

    Connection Lost
    Failed to connect to HTTP Proxy.
    Permalink
  21. Sasha said on 2014-12-11, 13:09
    Hi,
    Could you explain to me where I should set up a password(and user?) for kite when I connecting via ssh?
    Can't figure out this.

    Thank you in advance !
    -----
    Sashas-MacBook-Pro:~ Swift$ ssh foo.pagekite.me
    Swift@foo.pagekite.me's password: "What is the password?"
    Permission denied, please try again.
    Permalink
  22. mathew said on 2015-07-17, 22:13
    Hi!
    SSH worked flawlessly the first time, but we restarted the system and consistently get:

    nc: Proxy error: "HTTP/1.0 503 Unavailable"
    ssh_exchange_identification: Connection closed by remote host

    the system claims to connect successfully to the front-end at 173.230.155.164:443

    We can't figure out why it won't connect. any assistance would be great!

    thanks,
    Mathew
    Permalink
  23. Michael Breidenbach said on 2021-10-05, 18:01
    If i try to connect via ConnectBot/Android to my PageKite-Freedombox journalctl -f shows:

    sshd[27863]: Unable to negotiate with 127.0.0.1 port 54484: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 [preauth]

    is there any solution on the way?
    Thanks, Michael
    Permalink
  24. Ali Raza said on 2021-11-04, 14:37
    Ali Raza
    Permalink
  25. Silas said on 2021-11-26, 01:40
    How do I create open tunnel file and configure for internet pls help me
    Permalink
  26. Tobias said on 2021-11-27, 18:21
    La aplicación más facil
    Permalink
  27. Eoin said on 2023-12-31, 00:43
    I've got pagekite installed on my raspberry pi but cannot figure out how to actually connect to it using my Android phone.

    Looks like the ConnectBot solution doesn't work anymore.
    Can't install it on Android 14 (Samsung Galaxy S23) because it's built for an older version of Android.
    The patch submitted on gcode is gone, and that solution is 11 years old by now.

    Is there a way to use the mosy recent version of ConnectBot?
    Or does anyone have an alternative solution to SSH into pagekite using an Android phone?
    Permalink

Leave a comment

( (Please leave these blank: )

We use Gravatar for commenter's photos. Get your own, it's free!