當前位置:首頁 » 操作系統 » 進程ip源碼

進程ip源碼

發布時間: 2022-11-30 05:39:30

1. 如何實現java對指定ip和埠接收數據,求源碼

在客戶/伺服器通信模式中, 伺服器端需要創建監聽埠的 ServerSocket, ServerSocket 負責接收客戶連接請求。ServerSocket並不能直接向客戶端發送數據。
通常做法是,ServerSocket接收到一個連接請求,用accept建立連接:

socket = serverSocket.accept(); //接收客戶連接
然後啟動一個新的線程來處理和客戶端的收發數據的工作
Thread workThread = new Thread(new Handler(socket)); //創建一個工作進程
workThread.start(); //啟動工作進程
使用accept後的Socket去收發數據。

2. 如何查看進程的網路IP

在運行裡面輸入cmd 在出現的提示框中輸入 netstat,所出來的就是進程的埠號和ip

3. 怎麼獲取指定進程的IP,埠

查看進程的埠 和IP 進入CMD運行netstat -ano
http://jingyan..com/article/8275fc86a6bb5746a13cf670.html

4. asp.net如何獲取客戶端真實ip(源碼)

IPHostEntry
ip=Dns.GetHostByName(textBox1.Text);
//textBox1.Text是客戶端主機名
IPAddress[]
ipp=ip.AddressList;
for(int
i=0;i<=ipp.Length-1;i++)
{
listBox1.Items.Add(ipp[i].ToString());
}
to:客戶端系統時間?
監聽一下13號埠
:)
accSock=sock.Accept();//用於接收客戶端的連接請求,返回套接字對象
if(accSock.Connected)
{
IPAddress
ipAddress=IPAddress.Parse(((IPEndPoint)accSock.RemoteEndPoint).Address.ToString());
IPAddress
Port=IPAddress.Parse(((IPEndPoint)accSock.RemoteEndPoint).Port.ToString());
//獲取客戶端的IP地址
湖北新藍海是一家專注於網路營銷
網路推廣的領頭企業
,已為武漢健民、華工激光、江西仁和等多家知名企業提供網路營銷外包服務。詳情請到各大搜索引擎中搜索「湖北新藍海」

5. CMD查看進程IP

查看當前電腦所有監聽的IP埠用 netstat -ano
查看本地連接用ipconfig/all

6. 關於查進程的連接IP地址

添加控制項: Winsock1,Text1 用Text1顯示IP地址的代碼為: Text1.Text = Winsock1.LocalIP

7. windows 進程管理源代碼詳解,要詳細的,

Windows 是閉源開發的商業軟體,受商業版權法保護,別說大家都沒有,就算有也不能給你的(被微軟起訴那可不是小事)。

linux的是開源的,幹嘛不去讀Linux源碼呢?

新版本的太長,寫不開,給你最經典的0.11版的進程管理源碼。其他的你自己去查。作為一個好的程序員,必須學會充分利用搜索引擎。

---------------------------------------

linux0.11通過一個進程數組管理進程,最大允許64個進程存在。進程的狀態有就緒態,運行態,暫停態,睡眠態和僵死態等。睡眠態又可分為可中斷和不可中斷兩種。對於進程的管理,我覺得按照進程的狀態來講會清晰一些。
1.0號任務
0號比較特殊,是"純手工製作",下面就是製作過程
mem_init(main_memory_start,memory_end);
trap_init();
blk_dev_init();
char_dev_init();
tty_init();
time_init();
sched_init();
buffer_init(buffer_memory_end);
hd_init();
floppy_init();
sti();
move_to_user_mode();
這么多init當然不全是為0任務准備的,他們是初始化系統。對任務0來說,重要的是sched_init()和move_to_user_mode()兩個。sched_init()中手動設置了任務0的任務段描述符tss和局部段描述符ldt,並設置了tr和ldtr寄存器:
set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); //設置tss段描述符
set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt));//設置ldt描述符
...
ltr(0); //載入tss描述符地址到tr
lldt(0); //載入ldt描述符地址到ldtr

我們來看一下任務0的tss和ldt是什麼樣子
/*ldt*/ {0,0},\
{0x9f,0xc0fa00},\
{0x9f,0xc0f200},\
/*tss*/{0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\
0,0,0,0,0,0,0,0,\
0,0,0x17,0x17,0x17,0x17,0x17,0x17,\
_LDT(0),0X80000000,\
{}\
},\
從ldt 可以看到,任務的代碼和數據段均為640k,基址為0,DPL=3。這說明雖然任務0的代碼還是處在內核段內,但是任務的級別已經是用戶態了。從tss也可以看到這一點,代碼和數據都被置為0x17,也就是局部段描述符表第2項。還可以看到任務0的內核太堆棧被設置在init_task之後的一頁處,用戶態堆棧就是move_to_user_mode之前的內核態堆棧。這和普通進程不一樣,普通進程的用戶態堆棧在其64Mb地址空間的末端。
move_to_user_mode是在堆棧中創建一個任務切換的假象,用iret跳轉到外層3,這樣cpu就會自動根據tr載入tss,並初始化各個寄存器運行任務0。所以,任務0其實就是內核空間中的用戶態任務。
2.進程的創建
進程創建是由系統調用sys_fork完成的,主要使用了兩個函數find_empty_process和_process。前者在進程在進程數組中找一個不用的進程號給子進程,後者完成子進程信息的創建,主要是復制父進程的信息。
我們來看一下_process的代碼:
int _process(int nr,long ebp,long edi,long esi,long gs,long none,
long ebx,long ecx,long edx,long fs,long es,long ds,
long eip,long cs,long eflags,long esp,long ss)
{
struct task_struct *p;
int i;
struct file *f;
//首先為子進程的進程描述符分配一塊內存
p=(struct task_struct *)get_free_page();
if(!p)
return -EAGAIN;
//將新任務結構指針加入數組中
task[nr]=p;
//復制當前用戶的任務結構到子進程中。當然堆棧不復制
*p=*current;
//將子進程的狀態設為不可中斷等待,防止現在被調度
p->state=TASK_UNINTERRUPTIBLE;
P->pid=last_pid;
p->father=current->pid;
p->count=p->priority;
p->signal=0;
p->alarm=0;
p->leader=0;
p->utime=p->stime=0;
p->cutime=p->cstime=0;
p->start_time=jiffies;
p->tss.back_link=0;
//新進程的內核態堆棧在進程描述符頁末端
p->tss.esp0=PAGE_SIZE+(long)p;
P->tss.ss0=0x10;
//ip為父進程調用fork的下一條指令
p->tss.eip=eip;
//fork的返回值對子進程來說是0,對父進程來說是它的pid,通過這個區別,在fork調用返回後,父子進程的代碼段便被分割來,
p->tss.eax=0;
//雖然他們是在一個代碼文件中寫的
p->tss.ecx=ecx;
p->tss.edx=edx;
p->tss.ebx=ebx;
p->tss.esp=esp;
p->tss.ebp=ebp;
p->tss.esi=esi;
p->tss.edi=edi;
p->tss.es=es&0xffff;
p->tss.cs=cs&0xffff;
p->tss.ss=ss&0xffff;
p->tss.ds=ds&0xffff;
p->tss.fs=fs&0xffff;
p->tss.gs=gs&0xffff;
p->tss.ldt=_LDT(nr);
p->tss.trace_bitmap=0x80000000;
//如果父任務使用了協處理器,還要保存到tss中
if(last_task_used_math==current)
_asm("clts;fnsave %0"::"m"(p->tss.i387));
//為新任務設置新的代碼和數據段基地址。注意,因為linux0.11隻支持64M的進程空間,所以進程的線性地址空間在64M的邊界處。
//然後為新任務復制父進程的頁表。通過_page_tales,父子任務此時共用一個只讀的代碼數據段。在寫操作時,寫時復制會為新進程申請新的物理頁面。
if(_mem(nr,p)){
task[nr]=NULL;
free_page((long)p);
return -EAGAIN;
}
for(i=0;i<NR_OPEN;i++)
if(f=p->filp)
f->f_count++;
if(current->pwd)
current->pwd->i_count++;
if(current->root)
current->root->i_count++;
if(current->executable)
current->executable->i_count++;
//設置新任務的tss和ldt描述符
set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss));
set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt));
//返回子進程的pid
return last_pid;
}
參數都是堆棧中的值,nr是調用_process之前的find_empty_process的返回值,作為任務數組的序號。
3.進程的調度
進程創建之後並不是立即執行。系統會在適當的時刻調用系統調度函數schele,它會選擇適當的進程運行。調度函數可能在系統調用結束之後,進程暫停/ 睡眠/退出,時鍾中斷等多個地方調用。調度函數主要是通過進程的時間片來選擇一個運行時間最短的進程運行。如果沒有找到就運行空閑pause系統調用,在 Pause中,調度函數又會被調用。下面是主要代碼
while(1){
c=-1;
next=0;
i=NR_TASKS;
p=&task[NR_TASKS];
//尋找就緒任務中運行時間最短的任務
while(--i){
if(!(*--p))
continue;
if((*p)->state==TASK_RUNNING&&(*p)->counter>c)
c=(*p)->counter,next=i;
}
//如果找到,就退出。否則重新計算任務的時間片。注意,如果沒有任務,next始終為0,結果就被切換到任務0
if(c)break;
for(p=&LAST_TASK;p>&FIRST_TASK;--p)
if(*p)
(*p)->counter=((*p)->counter>>1)+(*)->priority;
}
switch_to(next);//通過長跳轉,轉換任務到新任務。
}
時鍾中斷是執行調度的重要措施,正是由於不斷的執行調度,系統才能在多個任務之間進行切換,完成多任務操作系統的目標。在調度器初始化時,除了手動設置了任務0,還對8253開啟了定時器中斷,對系統"點火".中斷中調用了do_timer函數。現在這是個很短的函數:
void do_timer(long cpl)
{
...
//根據優先順序調整進程運行時間
if(cpl)
current->utime++;
else
current->stime++;
//處理定時器中斷隊列
if(next_timer){
next_timer->jiffies--;
while(next_timer&&next_timer->jiffies<=0){
void(*fn)(void);
fn=next_timer->fn;
next_timer->fn=NULL;
next_timer=next_timer->next;
(fn)();
}
}
..
//對進程時間片減1。如果大於0 ,表示時間片還沒有用完,繼續
if((--current->counter>0)return;
//注意,內核態任務是不可搶占的,在0.11中,除非內核任務主動放棄處理器,它將一直運行。
if(!cpl)return;
//調度
schele();
}
4.進程的終止
進程可以自己中止,也可以被中止信號中止。do_exit執行退出。如果它有子進程的話,子進程就會成為孤兒進程,這里會將它的孩子託付給進程1(即init進程)管理。在成為僵死進程之後,還要通知父進程,因為他的父進程可能在等它呢。

8. (急)IP協議源代碼(C++)中的轉發函數誰能幫忙解釋一下

PERF_START 轉發開始,初始化。

ip_forward() 轉發函數, 轉發一個數據包。

ip_route() 找通向目的地的路線。
(struct ip_addr *)&(iphdr->dest 目的地轉成ip_addr結構。如果 找到路線,送返 結構 netif,否則 送返 NULL。
if((ip_route ...NULL){} 如果送返 NULL,也就是沒找到路線,則做 {...}

找到路線, 但是 if(netif == inp) ,表示同一個數據包,已到達,不必轉發。

IPH_TTL_SET(iphdr, IPH_TTL(iphdr) - 1); 如果ttl == 0,為防止數據包不斷在 IP 互聯網路上永不終止地循環,減小 數據包 生存時間TTL 1,icmp..是否執行封包回顯應答。

IPH_CHKSUM_SET 更新 IP checksum 檢查,根據條件決定是否+1。

DEBUGF -- 查錯時輸出的信息

#ifdef IP_STATS ... #endif
如果定義了IP_STATS (IP 開始) 則...

PERF_STOP() 終止 轉發

9. 易語言如何查詢指定進程ip,有源碼寫源碼,不會不說話。

要實現指定進程或者說每個進程不同IP。
編程語言無關的。
用WFP驅動攔截電腦上的網路。然後應用層與驅動通信。使用SOCKS5根據PID來設置不同的代理IP。就可以實現每個進程不同IP。

10. 怎樣實現單進程單進程單窗口IP

用驅動攔截網路數據包。然後用socks5轉發出去,就可以實現局部進程代理。
可以每個進程不同IP,每個窗口不同IP,也只可以做網路數據過濾。如放行哪些IP不代理等

熱點內容
安卓如何修改cpu 發布:2025-05-16 21:58:20 瀏覽:364
pythonainb 發布:2025-05-16 21:45:56 瀏覽:855
淘汰伺服器可以做家用電腦嗎 發布:2025-05-16 21:41:31 瀏覽:842
遊程編碼c語言 發布:2025-05-16 21:26:51 瀏覽:586
帝來哪個配置值得購買 發布:2025-05-16 21:12:29 瀏覽:462
什麼是nodejs前端伺服器 發布:2025-05-16 21:12:17 瀏覽:405
編譯選項立即綁定未定義符號 發布:2025-05-16 20:55:13 瀏覽:907
linuxmysql慢日誌 發布:2025-05-16 20:47:58 瀏覽:272
村兩委有哪些配置 發布:2025-05-16 20:34:47 瀏覽:294
我的世界有什麼伺服器好玩的 發布:2025-05-16 20:28:57 瀏覽:484