Jest to polecenie getsockname, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online systemu MAC OS
PROGRAM:
IMIĘ
getpeername - uzyskaj informacje o tym lub innym końcu połączenia gniazda
netpipe 4.2
STRESZCZENIE
GetPeername [ -gadatliwy ] [ -skarpetka ] [ fd ]
dostaje nazwę skarpety [ -gadatliwy ] [ -rówieśnik ] [ fd ]
OPIS
To jest nie strona podręcznika wywołania systemowego getpeername. Ta strona podręcznika jest w środku
sekcja 2. Możesz uzyskać do niego dostęp za pomocą polecenia takiego jak „man 2 getpeername” lub „man -s 2
getpeername”. Przepraszam za zamieszanie.
GetPeername wykonuje GetPeername(2) wywołanie systemowe dotyczące jednego z określonych deskryptorów plików
by fd i drukuje wyniki. Domyślny fd wynosi 0 (stdin). Możesz spowodować GetPeername
zachowywać się jak dostaje nazwę skarpety podając argument -sock.
dostaje nazwę skarpety wykonuje dostaje nazwę skarpety(2) wywołanie systemowe dotyczące jednego z określonych deskryptorów plików
by fd i drukuje wyniki. Domyślny fd wynosi 0 (stdin). Możesz spowodować dostaje nazwę skarpety
zachowywać się jak GetPeername podając argument -peer.
Istnieje poważne ograniczenie GetPeername. Jeśli proces zdalny zamknął plik
połączenie, GetPeername zakończy się niepowodzeniem z powodu błędu „Gniazdo nie jest podłączone”. To będzie
zdarza się z zatrważającą częstotliwością, gdy proces zdalny nie jest zależny od procesu lokalnego
proces wprowadzania danych i wysyła tylko niewielkie ilości danych wyjściowych przed zamknięciem
połączenie. Mam nadzieję, że praktyczne zastosowania GetPeername (jeśli takie istnieją) nie będzie
przećwicz ten problem.
Możesz użyć GetPeername aby znaleźć adres przeciwnego końca gniazda. Możesz
posługiwać się dostaje nazwę skarpety aby znaleźć adres lokalnego końca gniazda. W rzeczywistości są
ten sam program pod różnymi nazwami. Obydwa będziemy nazywać po imieniu
GetPeername w poniższym opisie.
GetPeername wie, jak wyświetlić informacje równorzędne o gniazdach UNIX i Internet. Jeśli ty
spróbuj użyć go na innym typie gniazda, zakończy się to niepowodzeniem z powodu „nieznanej rodziny adresów”
błąd. Jeśli regularnie masz do czynienia z dziwnymi gniazdami i pragniesz GetPeername pracować z nimi,
Wyślij mi emaila.
Jeśli gniazdo jest gniazdem domeny UNIX, to GetPeername wypisuje nazwę pliku (który
jest portem) w jednej linii. Jeśli -gadatliwy został określony, GetPeername drukuje więcej
szczegółowy raport składający się ze słowa `Unix' w pierwszej linii i słowa `Port' w
drugiej linii, a nazwa pliku w trzeciej linii.
Jeśli gniazdo jest gniazdem internetowym, to GetPeername wypisuje numer portu na pierwszym
linii i adres numeryczny w drugiej linii. Jeśli -gadatliwy został określony, GetPeername
drukuje bardziej szczegółowy raport składający się ze słowa „Internet” w pierwszej linii,
słowo „Port” w drugiej linii, numer portu w trzeciej linii, słowo „Host” w drugiej linii
czwarta linia. Zaczynając od piątej linii, wypisuje wszystkie numeryczne adresy internetowe
zwrócone przez Gethostbyaddr(3) rutyna biblioteczna. W pozostałych liniach wypisuje wszystko
nazwy gospodarzy.
WIELKANOC EGG
Jeśli określisz -gadatliwy dwukrotnie, program wydrukuje informację o prawach autorskich.
PRZYKŁADY
Pierwotnie zaprojektowałem GetPeername aby skrypt powłoki uruchamiany z kranu mógł dowiedzieć się, kto
z nim rozmawiał (i być może przeprowadził kontrolę dostępu). Dodałem getsockname dla
kompletność. Teraz zdałem sobie sprawę, że getsockname jest przydatny w przypadku usług multi-homingowych.
Jednak większość oprogramowania, które chcesz zrozumieć, obsługującego wiele adresów (httpd, ftpd), już istnieje
jest w stanie to zrobić i znacznie wydajniej niż opakowanie skryptu. Mimo to, może
przydać się pewnego dnia.
Klient $ hose mail.cise.uff.edu smtp - -in ./getpeername
25
128.227.205.210
Połączyłeś się z mail.cis.ufl.edu na porcie SMTP (port 25). Aby uzyskać szczegółowy raport:
klient$ wąż mail.cise.ufl.edu smtp --in ./getpeername -v
Internet
Port
25
Gospodarz
128.227.205.210
fireant.cise.uff.edu
Podajmy teraz przykład warunku wyścigu, który spowoduje GetPeername nie zdać:
klient$ wąż web.cise.ufl.edu 80 -in ./getpeername
./getpeername: getpeername nie powiodło się na deskryptorze 0: Gniazdo nie jest połączone
Demon HTTP próbuje odczytać żądanie i znajduje połowę połączenia pełnego dupleksu
zamknięte (przez specjalne zachowanie opcji -in on wąż gumowy(1)) i zrywa połączenie
zanim GetPeername może wysłać zapytanie do deskryptora pliku. Możemy spowodować, że demon HTTP zaczeka
dla nas, pozostawiając otwarte obie połówki połączenia dupleksowego.
klient$ wąż web.cise.ufl.edu 80 -fd0 ./getpeername -v
Internet
Port
80
Gospodarz
128.227.205.206
powódź.cise.ufl.edu
I na koniec wydobądźmy przydatne informacje z naszego gniazda.
klient$ wąż web.cise.ufl.edu 80 -fd0 sh -c " ./getpeername -v | \
ogon +5 | egrep -v '^[0-9.]*$' | głowa -1"
powódź.cise.ufl.edu
BŁĘDY
Gniazdo działanie on bez gniazda Połączenia fd które podałeś nie odnosi się do gniazda lub odnosi się
do gniazdka, które zostało zamknięte. Dzieje się tak, gdy biegasz GetPeername samo w sobie (tzn
jest mało prawdopodobne, że którykolwiek z deskryptorów plików dołączonych do interaktywnej powłoki faktycznie taki jest
gniazdka) lub jeśli pomyliłeś polecenie dotyczące kranu/węża i zapomniałeś o tym dup(2) jeden z twoich
deskryptorów lub jeśli zdalnej maszynie udało się wcześniej zamknąć połączenie GetPeername
mógł biegać.
Łazienka filet numer Podałeś zły numer pliku fd. Jeśli masz wystarczające umiejętności
faktycznie generuje ten błąd, prawdopodobnie wiesz, co jest nie tak.
Jeśli napotkasz inne błędy, daj mi znać.
Korzystaj z getsockname online, korzystając z usług onworks.net