টিসিপি পোর্ট খোলা আছে কি না তা আমি কীভাবে বলতে পারি? [বন্ধ]


9

আমি সি-তে সকেট প্রোগ্রামিং বাস্তবায়নের চেষ্টা করছি যখন আমি ক্লায়েন্ট থেকে কোনও সার্ভারে (উবুন্টু) সংযোগ দেওয়ার চেষ্টা করি, এটি "সংযোগ ব্যর্থ" এর মতো একটি ত্রুটি দেখায়।

সুতরাং আমি মনে করি সমস্যাটি বন্দর নিয়ে। আমি সকেট প্রোগ্রামিংয়ের জন্য 5454 / টিসিপি পোর্ট ব্যবহার করছি।

5454 বন্দর শুনতে পাচ্ছে কিনা তা আমি কীভাবে জানতে পারি? যদি তা না হয় তবে উবুন্টুতে সি ব্যবহার করে টিসিপি সকেট প্রোগ্রামিংয়ের জন্য আমি যে বন্দরগুলি ব্যবহার করতে পারি? লিনাক্স উবুন্টুতে কি কেবল বন্দরের সমস্যাটিই বা আমার কোডে কোনও ভুল আছে বা কোনও সেটিংস প্রয়োজন?

সম্পাদনা: কোড স্নিপেট:

  int socket_send;
   struct sockaddr_in address;
printf("\n Initialization Socket....");

socket_send = socket(AF_INET,SOCK_STREAM,0);
if(socket_send == -1)
{
    perror("\n Socket not created.Error:");
    return 1;
}
printf("\n Socket created");

address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(ip);
address.sin_port=htons(5454);

if(connect(socket_send,(struct sockaddr*)&address,sizeof(struct sockaddr))<0)
{
    perror("\nConnetion failed.Error:");
    return 1;
}
printf("\n Connected");

if(send(socket_send,(char*)buffer,size,flag)<0)
{
    perror("\nSending failed.Error:");
    return 1;
}
printf("\n Data successfully sent");
 close(socket_send);

সম্পাদনা : সমস্যা বন্দরে রয়েছে, তাই আমি কেবল উবুন্টু ইনস্টল করেছি এবং এটি কাজ করছে। আপনাদের সকলকে ধন্যবাদ.


প্রথমে, বন্দরের 5454 রাজ্যটি শোনা উচিত, তারপরে আপনি সংযোগ স্থাপন করুন sec তবে আপনার ফায়ারওয়ালটি পরীক্ষা করুন।
ফার্সিগাল্ফ

আমি সর্বদা চেষ্টা করি lsof -i:5454(আপনার পোর্ট খোলার প্রোগ্রামটি যেমন প্রোগ্রামটি ব্যবহার করে বা মূল হিসাবে এটি একই ব্যবহারকারী হিসাবে চালানো হতে পারে)।
কার্লোস ক্যাম্প্ডারেস

সার্ভার কোডটি কোথায় (বা সার্ভারটি একটি বিদ্যমান প্রোগ্রাম) নোট করুন আপনি যদি কোনও ডামি সার্ভার চালাতে চান তবে এনসি (নেটক্যাট) আপনার বন্ধু।
ফুন

উত্তর:


10

যেহেতু আপনি সিআই-তে প্রোগ্রামিং করছেন কিছুটা স্নিপেট পোস্ট করার কথা ভাবলেন যা আপনাকে দেখায় যে বন্দরটি খোলা আছে কি না, আমি একটি স্ট্রিং আউটপুট দেওয়ার জন্য প্রোগ্রাম করেছি। আপনার প্রয়োজন অনুসারে আপনি এটি সহজেই পরিবর্তন করতে পারেন।

আপনার দ্বিতীয় প্রশ্নের উত্তর, যেমন এখানে সবাই বলেছে, আপনি যে কোনও বন্দর ব্যবহার করতে পারবেন যদি আপনি সিস্টেমের সুপার ইউজার (মূল) হন তবে বন্দরটি অন্য কোনও অ্যাপ্লিকেশন ব্যবহার না করে। আপনি যদি মূল না হন তবে আপনি 1024 এর উপরে যে কোনও পোর্ট খুলতে পারবেন।

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 


int main(int argc, char *argv[])
{
    int portno     = 5454;
    char *hostname = "192.168.56.101";

    int sockfd;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) {
        error("ERROR opening socket");
    }

    server = gethostbyname(hostname);

    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }

    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, 
         (char *)&serv_addr.sin_addr.s_addr,
         server->h_length);

    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
        printf("Port is closed");
    } else {
        printf("Port is active");
    }

    close(sockfd);
    return 0;
}

অসাধারণ! সি ব্যবহার করে একটি বন্দরগুলির স্থিতি পরীক্ষা করার উপায়
ভ্যালেন্টাইন বাজরামি

আমি উল্লেখ "একটি ছোট স্নিপেট" mention। তবে খুব তথ্যপূর্ণ স্নিপেটের জন্য +1।
অলিভিয়ার ডুলাক

দ্রষ্টব্য, যদি এই কোডটি অন্য থ্রেডগুলির সাথে একই সাথে চলতে পারে যে কাঁটাচামচ () নতুন প্রক্রিয়াগুলি সম্ভব হয় SOCK_CLOEXECতবে socket()কলটির জন্য নির্দিষ্ট করে সকেট ফাইল বর্ণনাকারী সঠিকভাবে বন্ধ হয়ে গেছে তা নিশ্চিত করা প্রয়োজন ।
টন ভ্যান ড্যান হিউভেল

5

বেশ কয়েকটি উপায় রয়েছে, সবচেয়ে সাধারণ সম্ভবত:

# netstat -ltun

আপনি অবশ্যই grep(অন্যান্য) নিয়মিত অভিব্যক্তির জন্য পারেন।

আপনি যদি বিভিন্ন মেশিন (ক্লায়েন্ট এবং সার্ভার) ব্যবহার করেন তবে আপনার iptablesপাশাপাশি পরীক্ষা করাও দরকার।

আপনি বর্তমানে আপনার প্রোগ্রামগুলির জন্য ব্যবহৃত হচ্ছে না এমন কোনও বন্দর ব্যবহার করতে পারবেন। /etc/servicesপরিচিত এবং সংরক্ষিত বন্দরগুলির জন্য তবে চেক করুন ।


আপনি সরাসরি "নেটস্যাট্যাট -ল্টুন"
ডিএসএসকে 80

আমি যখন নেটস্প্যাট ব্যবহার করলাম | গ্রেপ লিস্টেন সেখানে এটি কেবল দুটি টিসিপি প্রস দেখায় এবং বাকিগুলি ইউডিপি বন্দর রয়েছে। এখন যদি আমি 5454 বন্দরটি সক্রিয় করতে চাই তবে কীভাবে সক্রিয় করব?
dxr

@ dsmsk80 আহ, আসলে আমার ধারণা খারাপ অভ্যাসগুলি খুব মরে যায়। সংশোধন।
দাউদ

1

টিসিপি পোর্টের জন্য লিঙ্কটি পরীক্ষা করুন ( http://wi-fizzle.com/article/458 ) খোলা আছে কি নেই

nc -z <host_or_ip> <port> 1>/dev/null 2>&1; result=$?;

if [ $result -eq 0 ]; then
    echo 'the port is open for tcp connections'
else
    echo 'the port was closed'
fi

1

কমান্ডটি ব্যবহার করুন:

nmap 192.168.56.101

এটি পরিষেবাগুলির নামের সাথে সেই মেশিনে খোলা বন্দরগুলির ফলাফল করবে


এর nmapজন্য কিছু না ব্যবহার করা বুশ আইএমএইচওর চারপাশে মারছে। একটি একক পোর্ট চেক করতে আপনার ব্যবহার করা উচিত nmap -p5454 192.168.56.101
jwg

এটি কেবল শিরোনামের উত্তর দেয় তবে প্রকৃত প্রশ্নের উত্তর দেয় না।
জেজেওলা

হ্যাঁ. আমি স্রেফ দিক নির্দেশনা দিচ্ছিলাম। কাঙ্ক্ষিত উত্তর পেতে তাকে হাঁটতে হবে। :)
SHW

1

কোনও প্রক্রিয়া টিসিপি পোর্টের সাথে আবদ্ধ কিনা তা নির্ধারণের জন্য সর্বোত্তম সরঞ্জাম netstat। যে প্রক্রিয়াটি আবদ্ধ রয়েছে তার নামের একটি তালিকা, সেই সাথে বন্দরের সাথে কোনও সংযোগের পাশাপাশি তাদের রাজ্যের তালিকা পেতে আপনি এ জাতীয় চালনা করতে পারেন।

উদাহরণ

$ netstat -tapn | head -15
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:49006               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:17500               0.0.0.0:*                   LISTEN      3516/dropbox        
tcp        0      0 0.0.0.0:17501               0.0.0.0:*                   LISTEN      3517/dropbox        
tcp        0      0 0.0.0.0:2143                0.0.0.0:*                   LISTEN      4383/ssh            
tcp        0      0 127.0.0.1:1986              0.0.0.0:*                   LISTEN      2757/mono           
tcp        0      0 0.0.0.0:2025                0.0.0.0:*                   LISTEN      4383/ssh            
tcp        0      0 192.168.1.20:58285          198.252.206.25:80           TIME_WAIT   -                   
tcp        0      0 192.168.1.20:58188          198.252.206.25:80           ESTABLISHED 3830/chrome --purge 
tcp        0      0 192.168.1.20:58286          198.252.206.25:80           TIME_WAIT   -                   
tcp        0      0 192.168.1.20:54000          174.37.23.130:6667          ESTABLISHED 2696/pidgin         

উপরের তৃতীয় কলামে স্থানীয়ভাবে খোলা বন্দরগুলি দেখায় এবং দূরবর্তী বন্দরগুলিতে আমরা সংযোগগুলি গ্রহণ করতে ইচ্ছুক, যেমন এই 2 লাইনের সাথে:

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   

এই 2 লাইনগুলি দেখায় যে আমরা পোর্ট 22, (এসএসডি) তে শুনছি এবং আমাদের যে কোনও ইন্টারফেস (যেমন কোনও নেটওয়ার্ক কার্ড, ইথারনেট বা ওয়্যারলেস) থেকে সংযোগ গ্রহণ করতে ইচ্ছুক। এই বন্দরের সাথে বর্তমানে কোনও সংযোগ নেই।

২ য় লাইনটি দেখায় যে 63৩১ বন্দরটিতে সিপিএস সার্ভার (মুদ্রণের জন্য) চলছে, এবং আমরা কেবল লোকালহোস্ট (127.0.0.1) ইন্টারফেসের মাধ্যমে এটিতে সংযোগ করতে পারি।

আরও নীচে আমাদের এই 2 লাইন রয়েছে:

tcp        0      0 192.168.1.20:58285          198.252.206.25:80           TIME_WAIT   -                   
tcp        0      0 192.168.1.20:58188          198.252.206.25:80           ESTABLISHED 3830/chrome --purge 

যা দেখায় যে আমরা আইপি ঠিকানায় 198.252.206.25 এ কোনও ওয়েবসাইট অ্যাক্সেস করছি। আমরা জানি এটি একটি ওয়েবসাইট কারণ আমরা এই সার্ভারটি পোর্ট ৮০ (এইচটিটিপি) এর মাধ্যমে অ্যাক্সেস করছি। এছাড়াও আমরা যদি আইপি ঠিকানাটি সন্ধান করি তবে আমরা এটি পাই:

$ dig -x 198.252.206.25 +short
stackoverflow.com.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.